Использование фильтра LDAP, чтобы найти все результаты. Получение сообщения об ошибке - PullRequest
0 голосов
/ 16 февраля 2012
DirectoryEntry testAD = new DirectoryEntry();    
DirectorySearcher search = new DirectorySearcher(testAD);

StringBuilder add = new StringBuilder();
search.PropertiesToLoad.Add("mail");
search.Filter = "(&(objectClass=user))";

foreach (SearchResult SearchAll in search.FindAll())
{
    DirectoryEntry de = SearchAll.GetDirectoryEntry();
    add.Append(de.Properties["mail"].Value.ToString()); // error message here
}

PrefixDescription.Text = add.ToString();

Я пытаюсь найти все электронные письма сначала в качестве теста, а затем всю информацию (имя, фамилию и т. Д.) И вывести ее в текстовое поле с использованием фильтра LPAR, но я продолжаю получать это сообщение об ошибке при запуске приложение:

Ссылка на объект не установлена ​​для экземпляра объекта.

1 Ответ

2 голосов
/ 16 февраля 2012

Ну, вы перечисляете пользователей - но у вас нет гарантии, что у получающегося пользователя будет адрес электронной почты! Вам необходимо базовое предотвращение ошибок «программирования 101»:

.....
foreach (SearchResult result in search.FindAll())
{
    // this is totally unnecessary - the "SearchResult" already *contains* all
    // the properties you've defined in your "PropertiesToLoad" collection!
    // DirectoryEntry de = SearchAll.GetDirectoryEntry();

    if(result.Properties["mail"] != null && result.Properties["mail"].Count > 0)
    {
        add.Append(result.Properties["mail"][0].ToString());
    }
}

С помощью этой дополнительной проверки вы избежите ошибки Object reference not set.... ...

...