VB将字符串设置为空

gh9*_*gh9 6 vb.net

当我预期它返回FALSE时,下面的代码返回TRUE.

为什么它返回TRUE?我期望没有什么可以将字符串的值设置为null,而不是空(根据msdn)

CodeingGround示例

Module VBModule

    Sub Main()
        dim x as String
        x = nothing
        console.writeline(x = string.Empty)
    End Sub

End Module
Run Code Online (Sandbox Code Playgroud)

什么都没有(Visual Basic)

表示任何数据类型的默认值.对于引用类型,默认值为空引用.

***编辑**** Nothing = String.Empty(为什么这些相等?)

VB.net中没有任何内容是类型的默认值.语言规范在2.4.7节中说明:

没有什么是特殊的文字; 它没有类型,可以转换为类型系统中的所有类型,包括类型参数.转换为特定类型时,它等效于该类型的默认值.

因此,当您对String.Empty进行测试时,Nothing将转换为长度为0的字符串.Is运算符应该用于测试Nothing,而String.Empty.Equals(Nothing)也将返回false.

那时评论,

转换为特定类型时,它等效于该类型的默认值.

字符串的默认值为null.我不明白为什么这个答案被接受了.

gh9*_*gh9 3

C# 和 VB.Net 字符串比较的区别

上面的帖子清楚地解释了答案,感谢评论部分的 Tim Schmelter 找到了上面的帖子

蒂姆·施梅莱特评论

它是从 vb 编译器调用的,如 String.Equality Operator 中的文档所述