Ошибка поиска вне каталога
Я пытаюсь получить полный список пользователей вместе с их адресом электронной почты. После многих попыток, приведенное ниже, наконец, дало мне некоторую форму радости, однако я получаю эту ошибку:
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
Кто-нибудь знает, почему это происходит и как это предотвратить? Полный код ниже.
Dim entry As DirectoryEntry = Nothing
Dim search As DirectorySearcher = Nothing
entry = New DirectoryEntry()
search = New DirectorySearcher()
search.Filter = "(&(objectCategory=person)(objectClass=user)(mail=*@companyname.com*))"
search.Sort.PropertyName = "cn"
Dim result As SearchResultCollection = search.FindAll()
For Each res As SearchResult In result
Dim Name = res.Properties("cn")(0).ToString()
Dim Email = res.Properties("mail")(0).ToString()
WindowsForm1.ListBox1.Items.Add(Name & " <" & Email & ">")
Next
entry.Dispose()
search.Dispose()
result.Dispose()
1 ответ
Похоже, это предполагает, что res.Properties имеет ключи "cn" и "mail" со значениями, которые являются массивами, в которых есть хотя бы один элемент.
res.Properties ("сп")(0).ToString()
Это говорит "преобразовать первый элемент в массиве из res.Properties, имя ключа которого cn, в строку". Такие звуки сбивают с толку, потому что это так. И это предполагает, что вы знаете:
- У res.Properties есть элемент, имя ключа которого cn
- Этот элемент имеет значение, которое является типом массива
- Этот массив имеет элемент в месте 0
- Элемент в местоположении может быть преобразован в строку
Попробуйте проверить их, прежде чем пытаться получить к ним доступ. Я не рассматривал какие-либо специфичные для типа функции, но ниже должно работать.
Dim Name, Email as String
If Not IsNothing(res.Properties("cn")) AndAlso res.Properties("cn").Count > 0 AndAlso Not IsNothing(res.Properties("mail")) AndAlso res.Properties("mail").Count > 0 Then
Name = res.Properties("cn")(0)
Email = res.Properties("mail")(0)
End If
Это должно быть более тщательно продумано, но идея и основная причина одинаковы - мы стараемся избегать доступа к значениям массива, пока не будем уверены, что у нас есть массив, который имеет значение, к которому нужно обращаться в первую очередь. Всегда проверяйте свои данные.