当我预期它返回FALSE时,下面的代码返回TRUE.
为什么它返回TRUE?我期望没有什么可以将字符串的值设置为null,而不是空(根据msdn)
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.我不明白为什么这个答案被接受了.
上面的帖子清楚地解释了答案,感谢评论部分的 Tim Schmelter 找到了上面的帖子
蒂姆·施梅莱特评论
它是从 vb 编译器调用的,如 String.Equality Operator 中的文档所述
| 归档时间: |
|
| 查看次数: |
423 次 |
| 最近记录: |