Ничего = string.empty (почему эти равные?)
Вопрос
Почему первое, если заявление оценивает правда? Я знаю, использую ли я «ждать» вместо «=», то он не оценивает правду. Если я заменил 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