Почему я получаю "Ссылка на объект не установлена ​​на экземпляр объекта" здесь?

Вот мой код:

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 ответа

Решение

Основываясь на этом утверждении:

код взрывается после того, как было назначено данное имя...

эта строка кода:

userEntry.Properties[ "EmployeeNumber" ]

взрывается и дает вам знать, что нет свойства с именем EmployeeNumber или что Value из EmployeeNumber является null, Я собираюсь сделать ставку на второе, и поэтому измените эту строку на это:

userEntry.Properties[ "EmployeeNumber" ] as string;

и ваш employeeNumber поле будет установлено в null когда он является null но это не бросит исключение.

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

работал

Другие вопросы по тегам