代码之家  ›  专栏  ›  技术社区  ›  Justin Helgerson

无=string.empty(为什么这些相等?)

  •  24
  • Justin Helgerson  · 技术社区  · 16 年前

    为什么第一个if语句的值为true?我知道如果我用“is”而不是“=”,那么它的值就不会是真的。如果我将string.empty替换为“foo”,它的值不会为true。string.empty和“foo”都有相同类型的字符串,那么为什么一个值为true,另一个值为true?

        //this evaluates to true
        If Nothing = String.Empty Then
    
        End If
    
        //this evaluates to false
        If Nothing = "Foo" Then
    
        End If
    
    4 回复  |  直到 16 年前
        1
  •  21
  •   Rebecca Chernoff    16 年前

    vb.net中没有任何内容是类型的默认值。这个 language spec 在第2.4.7节中说:

    没有特殊的文字;它没有类型,可以转换为类型系统中的所有类型,包括类型参数。当转换为特定类型时,它相当于该类型的默认值。

    所以,当对string.empty进行测试时,不会将任何内容转换为长度为0的字符串。is运算符应用于对Nothing进行测试,String.Empty.Equals(Nothing)也将返回False。

        2
  •  4
  •   Heinzi    10 年前

    这是vb的一个特例 = <> 运算符。

    这个 Language Specification 第11.14节中的规定:

    进行字符串比较时,空引用等效于字符串文本“”。

        3
  •  2
  •   Amber    16 年前

    试试这个:

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

    这个 = 运算符不强制相等的类型,而 .Equals() 字符串对象的方法和 Is 操作员。

        4
  •  2
  •   DanielRuzo    15 年前

    与此主题相关,如果使用一个初始化为“Nothing”的字符串变量分配给sqlparameter的属性“Value”,则该参数将被忽略,不包括在发送到服务器的命令中,并且会引发缺少参数的错误。 如果用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
    
    推荐文章