0

У меня есть функция, которая ищет AD для атрибута (extensionAttribute3). Он отлично работает, если атрибут имеет значение, но если он не установлен, это ошибки с «Ссылка на объект, не установленная на экземпляр объекта». Это всегда ошибки на линии:Проверить значение Null в VB.NET

CurrentPIN = dirResult.GetDirectoryEntry.Properties("extensionAttribute3").Value.ToString 

Я попытался с помощью «Если IsNothing» и «не IsNot ничего» для проверки значений NULL на обоих dirResult & CurrentPin, но это все еще ошибки. Как я могу успешно проверить значения NULL?

Проверка dirResult является NULL:

Private Function GetUserProperties() 
    Dim ADName As String = GetLogonName() 
    Dim CurrentPIN As String = Nothing 
    Dim dirEntry As DirectoryEntry = GetDirectoryEntry() 
    Dim dirSearcher As DirectorySearcher = New DirectorySearcher(dirEntry) 
    dirSearcher.Filter = ("(samAccountName=" & ADName & ")") 
    dirSearcher.PropertiesToLoad.Add("extensionAttribute3") 
    dirSearcher.SearchScope = SearchScope.Subtree 
    Dim dirResult As SearchResult = dirSearcher.FindOne() 
    If IsNothing(dirResult) Then 
     Return "<not set>" 
    Else 
     CurrentPIN = dirResult.GetDirectoryEntry.Properties("extensionAttribute3").Value.ToString 
     Return CurrentPIN 
    End If 
End Function 

Проверка CurrentPin является NULL:

Private Function GetUserProperties() 
     Dim ADName As String = GetLogonName() 
     Dim CurrentPIN As String = Nothing 
     Dim dirEntry As DirectoryEntry = GetDirectoryEntry() 
     Dim dirSearcher As DirectorySearcher = New DirectorySearcher(dirEntry) 
     dirSearcher.Filter = ("(samAccountName=" & ADName & ")") 
     dirSearcher.PropertiesToLoad.Add("extensionAttribute3") 
     dirSearcher.SearchScope = SearchScope.Subtree 
     Dim dirResult As SearchResult = dirSearcher.FindOne() 
     CurrentPIN = dirResult.GetDirectoryEntry.Properties("extensionAttribute3").Value.ToString 
     If IsNothing(CurrentPIN) Then 
      Return False 
     Else 
      Return CurrentPIN 
     End If 
    End Function 
+0

Не дублирующее, но очень рекомендуемое чтение [Что такое исключение NullReferenceException и как его исправить] (http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i -fix-it) Проверьте ответ, посвященный VB.NET – Steve

+0

Вам просто нужно поместить нулевую проверку в нужное место. Это свойство «Свойства» («extensionAttribute3»). Скорее всего, ничего не будет, вы не сможете использовать свойство Value Nothing. –

ответ

1

Вы должны проверить NULL в свойствах ("extensionAttribute3"):

If dirResult Is Nothing OrElse dirResult.GetDirectoryEntry.Properties("extensionAttribute3") Is Nothing Then 
    Return "<not set>" 
Else 
    CurrentPIN = dirResult.GetDirectoryEntry.Properties("extensionAttribute3").Value.ToString 
    Return CurrentPIN 
End If 

Объяснение:

Is Nothing - это ИМО - более чистый способ проверить наличие NULL, а AFAIK - также повышает уровень стека.

Если extensionAttribute3 не имеет значения, вы имеете исключение, потому что

CurrentPIN = dirResult.GetDirectoryEntry.Properties("extensionAttribute3").Value.ToString

переводится на

CurrentPIN = <NULL>.Value.ToString

Проверка NULL на dirResult только чтобы предотвратить возможное будущее исключение.

+0

Работало, просто нужно было сделать 1 небольшую замену, мне нужно было добавить. Значение в строке OrElse, поскольку она давала ту же «ссылку на объект», которая не была установлена ​​в экземпляр объекта. ошибка 'Если dirResult ничего нет ORElE dirResult.GetDirectoryEntry.Properties (" extensionAttribute3 "). Значение ничего не значит" –