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

时间:2013-06-06 19:51:17

标签: c# .net directorysearcher

以下是我的代码:

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

我似乎无法解决的问题是,当我开始循环浏览“结果”对象时,代码会在givenName被分配后爆炸。我得到的错误是:

  

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

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

2 个答案:

答案 0 :(得分:1)

基于此声明:

  

在givenName被分配后,代码会爆炸......

这行代码:

userEntry.Properties[ "EmployeeNumber" ]

正在爆炸,并且让您知道EmployeeNumber Value EmployeeNumber nulluserEntry.Properties[ "EmployeeNumber" ] as string; 。我打赌第二个,所以改变这一行:

employeeNumber

null字段将null设置为{{1}},但不会引发异常。

答案 1 :(得分:1)

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

工作