Nothing = String.Empty (Why are these equal?)

前端 未结 4 932
春和景丽
春和景丽 2020-12-01 15:58

Why does the first if statement evaluate to true? I know if I use \"is\" instead of \"=\" then it won\'t evaluate to true. If I replace String.Empty with \"Foo\" it doesn\

相关标签:
4条回答
  • 2020-12-01 16:20

    Try this:

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

    The = operator doesn't enforce equal types, whereas the .Equals() method of a string object does, as does the Is operator.

    0 讨论(0)
  • 2020-12-01 16:32

    Nothing in VB.net is the default value for a type. The language spec says in section 2.4.7:

    Nothing is a special literal; it does not have a type and is convertible to all types in the type system, including type parameters. When converted to a particular type, it is the equivalent of the default value of that type.

    So, when you test against String.Empty, Nothing is converted to a string, which has a length 0. The Is operator should be used for testing against Nothing, and String.Empty.Equals(Nothing) will also return false.

    0 讨论(0)
  • 2020-12-01 16:33

    Related to this topic, if you use a string variable initialized with "nothing" to be assigned to the property "value" of a SqlParameter that parameter is ignored, not included in the command sent to the server, and a missing parameter error is thrown. If you initialize that variable with string.empty everything goes fine.

    //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
    
    0 讨论(0)
  • 2020-12-01 16:40

    It's a special case of VB's = and <> operators.

    The Language Specification states in Section 11.14:

    When doing a string comparison, a null reference is equivalent to the string literal "".


    If you are interested in further details, I have written an in-depth comparison of vbNullString, String.Empty, "" and Nothing in VB.NET here:

    • https://stackoverflow.com/a/34069187/87698
    0 讨论(0)
提交回复
热议问题