Проверка нулевого значения для типов значений в VB.NET

У меня есть KeyValuePair(Of TKey,TValue), и я хочу проверить, является ли он нулевым или нет:

Dim dictionary = new Dictionary(Of Tkey,TValue)
Dim keyValuePair = dictionary.FirstOrDefault(Function(item) item.Key = *someValue*)

If keyValuePair isNot Nothing Then 'not valid because keyValuePair is a value type
    ....
End If

If keyValuePair <> Nothing Then 'not valid because operator <> does not defined for KeyValuePair(of TKey,TValue)
   ...
End If

Как я могу проверить, является ли keyValuePair нулевым или нет?


person Arsalan    schedule 12.03.2020    source источник
comment
Вы должны задать себе вопрос: почему вы используете LINQ для поиска статьи в словаре? Вы должны использовать Dictionary‹TKey,TValue›.TryGetValue(TKey, TValue) Method.   -  person TnTinMn    schedule 12.03.2020


Ответы (1)


KeyValuePair(Of TKey, TValue) - это структура (структура), она имеет значение по умолчанию, с которым вы можете сравнить.

Dim dictionary As New Dictionary(Of Integer, string)
Dim keyValuePair = dictionary.FirstOrDefault(Function(item) item.Key = 2)

Dim defaultValue AS KeyValuePair(Of Integer, string) = Nothing

If keyValuePair.Equals(defaultValue) Then
    ' Not found
Else
    ' Found
End If

Nothing представляет значение по умолчанию соответствующего типа.

Но поскольку вы ищете ключ Dictionary, вместо него можно использовать TryGetValue.

Dim dictionary As New Dictionary(Of Integer, string)
Dim value As String

If dictionary.TryGetValue(2, value) Then
    ' Found
Else
    ' Not found
End If
person Fabio    schedule 12.03.2020
comment
Я проверил keyValuePair.Equals(Nothing). - person Arsalan; 12.03.2020
comment
Ничто не представляет значение по умолчанию для типов значений. Это меня немного смущает. Из документов. В Visual Basic, если вы задаете для переменной типа значения, не допускающего значения NULL, значение Nothing, переменной присваивается значение по умолчанию для ее объявленного типа. - person Mary; 12.03.2020