Nothing = String.Empty (Почему они равны?)

Почему первое утверждение if оценивается как истинное? Я знаю, что если я использую "is" вместо "=", это не будет иметь значение true. Если я заменю String.Empty на "Foo", это не будет иметь значение true. И String.Empty, и "Foo" имеют одинаковый тип String, так почему один из них имеет значение true, а другой - нет?

    //this evaluates to true
    If Nothing = String.Empty Then

    End If

    //this evaluates to false
    If Nothing = "Foo" Then

    End If

4 ответа

Решение

Ничто в VB.net не является значением по умолчанию для типа. Спецификация языка говорит в разделе 2.4.7:

Ничто не является особым буквальным; он не имеет типа и может быть преобразован во все типы в системе типов, включая параметры типов. При преобразовании в определенный тип он эквивалентен значению по умолчанию этого типа.

Таким образом, когда вы проверяете String.Empty, Nothing преобразуется в строку, имеющую длину 0. Оператор Is должен использоваться для проверки Nothing, а String.Empty.Equals(Nothing) также возвращает false.

Это особый случай VB = а также <> операторы.

Спецификация языка в разделе 11.14 гласит:

При сравнении строк пустая ссылка эквивалентна строковому литералу "".

В связи с этим, если вы используете строковую переменную, инициализированную "none", для присваивания свойству "value" SqlParameter, то этот параметр игнорируется, не включается в команду, отправляемую на сервер, и выдается ошибка отсутствующего параметра., Если вы инициализируете эту переменную с помощью string.empty, все будет хорошо.

//This doesn't work
Dim myString as String = nothing
mySqlCommand.Parameters.Add("@MyParameter", SqlDbType.Char).Value = myString

//This works    
Dim myString as String = string.empty
mySqlCommand.Parameters.Add("@MyParameter", SqlDbType.Char).Value = myString

Попробуй это:

Console.WriteLine("Is String.Empty equal to Nothing?: {0}", String.Empty.Equals(Nothing))

= оператор не применяет одинаковые типы, тогда как .Equals() метод строкового объекта делает, как и Is оператор.

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