Почему делает первое, если оператор оценивает к истинному? Я знаю, использую ли я "," вместо "=" затем, это не оценит к истинному. Если я заменяю Строку. Пустой с "Нечто" это не оценивает к истинному. Обе Строки. Пустой и "Нечто" имеют тот же тип Строки, итак, почему каждый оценивает к истинному, и другой не делает?
//this evaluates to true
If Nothing = String.Empty Then
End If
//this evaluates to false
If Nothing = "Foo" Then
End If
Ничто в VB.net не является значением по умолчанию для типа. Спецификация языка говорит в разделе 2.4.7:
Ничто не является специальным литералом; он не имеет типа и может быть преобразован во все типы в системе типов, включая параметры типа. При преобразовании в конкретный тип он является эквивалентом значения по умолчанию для этого типа.
Итак, когда вы проверяете String.Empty, Nothing преобразуется в строку, имеющую длину 0. Для проверки на Nothing следует использовать оператор Is, и String.Empty.Equals (Nothing) также вернет false. .
Попробуйте следующее:
Console.WriteLine("Is String.Empty equal to Nothing?: {0}", String.Empty.Equals(Nothing))
Оператор =
не применяет одинаковые типы, тогда как .Equals ()
строкового объекта, как и оператор Is
.