为什么我在这里得到“对象引用未设置为对象的实例”

本文关键字:设置 对象 实例 对象引用 在这里 为什么 | 更新日期: 2023-09-27 18:17:20

以下是我的代码:

DirectorySearcher search = new DirectorySearcher( directory );
search.Filter = "(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(|(sn=*)))";
search.PropertiesToLoad.Add( "GivenName" );
search.PropertiesToLoad.Add( "OfficePhone" );
search.PropertiesToLoad.Add( "EmployeeNumber" );

SearchResultCollection results = search.FindAll();
int thisCount = results.Count;
string filePath = "C:''test.csv";
string contents = string.Empty;
int counter = 0;
foreach( SearchResult result in results ) {
  DirectoryEntry userEntry = result.GetDirectoryEntry();
  string givenName = userEntry.Properties[ "userPrincipalName" ].Value.ToString();
  string employeeNumber = userEntry.Properties[ "EmployeeNumber" ].Value.ToString();
  string phoneNumber = userEntry.Properties[ "OfficePhone" ].Value.ToString();
  counter = counter + 1;
}
System.IO.File.WriteAllText( filePath, contents );

我似乎无法解决的问题是,当我开始循环访问"results"对象时,代码在分配givenName后会爆炸。 我得到的错误是:

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

我试图弄清楚如何正确分配它,但我总是遇到它。 任何建议将不胜感激。 我很确定这与我没有正确理解DirectorySearcher/DirectoryEntry有关 - 但我可能是错的。 :-)

为什么我在这里得到“对象引用未设置为对象的实例”

基于此语句:

分配给定名称后代码爆炸...

这行代码:

userEntry.Properties[ "EmployeeNumber" ]

正在爆炸并让您知道没有名为EmployeeNumber的属性EmployeeNumberValuenull.我将押注第二个,因此将该行更改为:

userEntry.Properties[ "EmployeeNumber" ] as string;

并且您的employeeNumber字段将在null时设置为null,但它不会引发异常。

userEntry.Properties[ "EmployeeNumber" ].Value as string; 

工作