Некорректный возврат коллекции - C#
Формулировка задачи:
Добрый день.
пишу мелкую программу поиска по AD и решил для хранения всех найденных пользователей использовать коллекцию
вот код:
самого класса
метода, который должен возвращать коллекцию
если шагать по программе - видно что элементы в коллекцию добавляются, и добавляются корректно, но вот при выводе следующим образом:
в консоль( и в лог и в контрольные значения) выводится один пользователь, зато много раз, то есть каким то образом все элементы коллекции становятся замененными. кто что может подсказать?
выглядит не особо красиво, в дальнейшем, наверное, изменю эту строку, но самое главное - оно выводит корректно учетки
class DomainUser { public string Name; public string DomainName; public string OUname; public int UserStatus; }
static List<DomainUser> searchAllDomainUser(string domain) { var SearchedUsers=new List<DomainUser>(); DomainUser findUser = new DomainUser(); DirectoryEntry de = new DirectoryEntry(string.Format("LDAP://DC={0},DC=local,DC=ru",domain)); DirectorySearcher deSearch = new DirectorySearcher(); deSearch.Filter = "(&(objectCategory=person)(objectClass=user))"; deSearch.SearchRoot = de; deSearch.SearchScope = SearchScope.Subtree; deleteLog(Application.StartupPath, "DelUsers.txt"); SearchResultCollection results = deSearch.FindAll(); foreach (SearchResult result in results) { findUser.DomainName = domain; findUser.Name = result.GetDirectoryEntry().Name.Replace("CN=", ""); findUser.OUname = GetOU(result.GetDirectoryEntry().Path); if ((Convert.ToInt32(result.Properties["userAccountControl"][0].ToString()) - 512) == 2) findUser.UserStatus = 0; else findUser.UserStatus = 1; //writeLog(string.Format("{0}\t{1}\t{3}\t{2}",findUser.Name, findUser.DomainName, findUser.OUname, findUser.UserStatus); SearchedUsers.Add(findUser); } Console.WriteLine("The end."); return SearchedUsers; }
var FindDomainUsers = new List<DomainUser> (); FindDomainUsers = searchAllDomainUser("myDomain"); foreach (var findUsers in FindDomainUsers) { writeLog(findUsers.Name, findUsers.DomainName, findUsers.OUname, findUsers.UserStatus); }
Спасибо, с утра разобрался.
Проблема была в том, что я добавлял уже созданный тип класса, а надо было делать так:
SearchedUsers.Add(new DomainUser(){ Name=(result.GetDirectoryEntry().Name.Replace("CN=", "")),OUname = (GetOU(result.GetDirectoryEntry().Path)),DomainName = domain,UserStatus=(Convert.ToInt32(result.Properties["userAccountControl"][0].ToString()) - 512 == 2?0:1)});
Решение задачи: «Некорректный возврат коллекции»
textual
Листинг программы
foreach (SearchResult result in results) { DomainUser findUser = new DomainUser(); findUser.DomainName = domain; findUser.Name = result.GetDirectoryEntry().Name.Replace("CN=", ""); findUser.OUname = GetOU(result.GetDirectoryEntry().Path); if ((Convert.ToInt32(result.Properties["userAccountControl"][0].ToString()) - 512) == 2) findUser.UserStatus = 0; else findUser.UserStatus = 1; //writeLog(string.Format("{0}\t{1}\t{3}\t{2}",findUser.Name, findUser.DomainName, findUser.OUname, findUser.UserStatus); SearchedUsers.Add(findUser); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д