C# 4.0 使用LDAP筛选器查找所有结果。获取错误消息

C# 4.0 使用LDAP筛选器查找所有结果。获取错误消息,c#-4.0,active-directory,ldap,C# 4.0,Active Directory,Ldap,我尝试首先查找所有电子邮件作为测试,然后查找所有信息(名字、姓氏等),并使用LPAR筛选器将其列在文本框中,但在运行应用程序时,我不断收到此错误消息: 对象引用未设置为对象的实例 好吧,您正在枚举用户-但是您不能保证生成的用户将具有电子邮件地址!您需要基本的“编程101”错误预防: DirectoryEntry testAD = new DirectoryEntry(); DirectorySearcher search = new DirectorySearcher(testAD);

我尝试首先查找所有电子邮件作为测试,然后查找所有信息(名字、姓氏等),并使用LPAR筛选器将其列在文本框中,但在运行应用程序时,我不断收到此错误消息:

对象引用未设置为对象的实例


好吧,您正在枚举用户-但是您不能保证生成的用户将具有电子邮件地址!您需要基本的“编程101”错误预防:

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();

通过这个额外的检查,您可以避免
对象引用未设置…
错误…

lol谢谢,我很懒,不关心错误预防,因为其他时候我在玩其他方法,它只输出一个空格。当我没有正确地实例化一个瞬间时,我通常会看到那个错误消息,所以我从来不知道那个错误与此相关!谢谢你,马克。
.....
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());
    }
}