为什么我得到"对象引用未设置为对象的实例"来自GetDirectoryEntry()?

时间:2015-01-13 14:03:49

标签: c# .net active-directory directoryservices

我有一些奇怪的错误。

DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://11.111.111.11", "user", "1");

DirectorySearcher searcher = new DirectorySearcher(directoryEntry)
{
    PageSize = int.MaxValue,
    Filter = "(&(objectClass=user)(sAMAccountName=" + txt + "*))"
};

SearchResultCollection resultCollection = searcher.FindAll();
foreach (SearchResult result in resultCollection)
{
    if (result != null)
    {
        users.Add(new ObjectTest(
        result.GetDirectoryEntry().Properties["samaccountname"].Value as string,
        result.GetDirectoryEntry().Properties["givenName"].Value as string,
        result.GetDirectoryEntry().Properties["sn"].Value as string,
        result.GetDirectoryEntry().Properties["mail"].Value as string));
    }
}

directoryEntry.Close();

当我搜索一些用户时,我会收集它们,然后在foreach中使用它们。 例如:我输入用户并获得5个用户的集合,之后我填充我的数组。

但有时候我会收到用户的集合,在这里给我错误:

例如我输入测试,我知道我有用户"测试"并且我看到我的集合具有正确的计数,但是在结果之后.GetDirectoryEntry()我得到异常对象引用未设置为对象的实例。

我在网站上找不到类似内容。

注意: Collection具有正常的对象计数,而SearchResult不为null,它具有正常的Path! 谢谢!

1 个答案:

答案 0 :(得分:1)

这是我的评论,回答:

检查Properties吸气剂的结果;可能其中一个返回null,这就是你的NullReferenceException来自的地方(当你试图得到一个null属性的Value时)。

编辑:无法删除答案,但根据评论中的@baldpate,PropertyCollection.Item[string]永远不会返回null,因此以上内容不是{{1 }}。无论如何,找到异常来源的策略是:

  1. 将每个方法调用放在自己的行上,并将结果存储在变量中。
  2. 一次一行地执行代码,测试输出,直到找到空的。