Некорректный возврат коллекции - 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);
                
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5