没有什么=String.空(为什么这些都是平等的?)
题
为什么第一,如果声明的评估,真的吗?我知道如果我使用"的"而不是"="则无法评估真实的。如果我代替串。空与"Foo"它不真实的。这两个串。空和"Foo"具有相同的类型字符串,那么,为什么一个评估为真正的和其他的没有?
//this evaluates to true
If Nothing = String.Empty Then
End If
//this evaluates to false
If Nothing = "Foo" Then
End If
解决方案
在VB.net没有为类型的默认值。该语言规范说,在节2.4.7:
没有什么特殊的文字;它没有一个类型,可转换为在类型系统中的所有类型,包括类型参数。当转换成特定类型的,这是该类型的默认值的等效。
所以,当你测试针对的String.Empty,没有什么是转换成一个字符串,其具有一个长度为0的是操作员应被用于对没有进行测试时,和String.Empty.Equals(没有)也将返回false
其他提示
这是一个特殊的情况下VB的 =
和 <>
经营者。
的 语言规范 各国在第11.14:
当做一串比较,空引用相当于literal string"".
如果你有兴趣进一步详情,我已经写了一个深入的比较 vbNullString
, String.Empty
, ""
和 Nothing
在VB.NET 在这里:
尝试这种情况:
Console.WriteLine("Is String.Empty equal to Nothing?: {0}", String.Empty.Equals(Nothing))
在=
操作者不执行类型相等,而 .Equals()
一>一个字符串对象的方法不一样,在操作者Is
与此相关的话题,如果您使用“无中生有”地被分配到财产的SqlParameter的“值”参数将被忽略,不包括在发送给服务器的命令,初始化字符串变量,而遗漏的参数引发错误。 如果初始化的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
不隶属于 StackOverflow