为什么我从 GetDirectoryEntry() 得到 "Object reference not set to an instance of an object"?

Why am I getting "Object reference not set to an instance of an object" from GetDirectoryEntry()?

我有一些奇怪的错误。

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

当我搜索一些用户时,我得到了 collection 个,然后在 foreach 中使用它们。 例如:我输入 user 并得到 collection 和 5 个用户,之后我填充我的数组。

但有时 collection 用户会在此处给我错误:

例如,我输入测试,我知道我有用户 "test",我看到我的 collection 有正确的计数,但在 result.GetDirectoryEntry() 之后我得到异常 Object 引用未设置为 object.

的实例

我在网站上找不到任何类似的东西。

注意: Collection 有 object 的正常计数,并且 SearchResult 不为 null 它有正常的路径! 谢谢!

这是我的评论,已回答:

检查 Properties getter 的结果;大概其中之一是 returning null,这就是您的 NullReferenceException 的来源(当您尝试获取 null 属性 的 Value)时)。

编辑: 无法删除答案,但根据评论中的@baldpate,PropertyCollection.Item[string] 永远不会 return null,所以上面不是 NullReferenceException 的解释。无论如何,寻找异常来源的策略是:

  1. 将每个方法调用单独一行,并将结果存储在一个变量中。
  2. 逐行逐行执行代码,测试输出,直到找到空值。