Вопрос

Почему первое, если заявление оценивает правда? Я знаю, использую ли я «ждать» вместо «=», то он не оценивает правду. Если я заменил string.empty с "foo", это не оценивает true. Обе струны. Пупей, и «Foo» имеют одинаковый тип строки, так почему же оценивается к True, а другой нет?

    //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, ничто не преобразуется в строку, которая имеет длину 0. Оператор должен использоваться для тестирования против ничего, а string.uppy.equals (ничего) также вернет ложь.

Другие советы

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

То Спецификация языка Государства в разделе 11.14:

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


Если вы заинтересованы в более подробной информации, я написал более глубокое сравнение vbNullString, String.Empty, "" и Nothing во vb.net здесь:

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

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

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

Связанные с этой темой, если вы используете строковую переменную, инициализирующуюся с «ничто», которая должна быть назначена на свойство «значение» SQLParameter, который параметр игнорируется, не включен в команду, отправленную на сервер, и ошибка отсутствующего параметра Отказ Если вы инициализируете эту переменную со строкой. Пустые все идет нормально.

//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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top