当我希望它返回 FALSE 时,下面的代码会返回 TRUE 。
为什么返回 TRUE ?我期望没有将字符串的值设置为null,而不是空(根据msdn)
Module VBModule
Sub Main()
dim x as String
x = nothing
console.writeline(x = string.Empty)
End Sub
End Module
没什么(Visual Basic)
表示任何数据类型的默认值。对于参考类型, 默认值为空引用。
*** **** EDIT Nothing = String.Empty (Why are these equal?)
VB.net中没有任何内容是类型的默认值。语言规范在2.4.7节中说明:
没有什么是特殊的文字;它没有类型而且是 可转换为类型系统中的所有类型,包括类型 参数。转换为特定类型时,它是等效的 该类型的默认值。
因此,当你对String.Empty进行测试时,Nothing被转换为一个长度为0的字符串.Is运算符应该用于测试Nothing,而String.Empty.Equals(Nothing)也将返回false
每次评论,
转换为特定类型时,它相当于 该类型的默认值。
字符串的默认值为null。我不明白为什么接受这个答案。
答案 0 :(得分:2)
以上帖子清楚地解释了答案,感谢蒂姆·施梅特尔在评论部分找到上述帖子
Per Tim Schmeleters评论
从vb编译器调用它,因为文档在String.Equality运算符中声明