所有这些
txtUsername.Text <> vbNullString
txtUsername.Text <> String.Empty
txtUsername.Text <> ""
似乎返回相同的结果.那么vbNullString
,String.Empty
和之间的区别是""
什么?
Hei*_*nzi 17
String.Empty
并且""
都表示长度为零的字符串.
与声称" [r]表示零长度字符串 " 的文档相反,实际上是(在C#中,参见参考源).vbNullString
vbNullString
Nothing
null
(请注意,这仅适用于VB.NET!VBA的情况有所不同,详见下文.)
与其他答案所说的相反,您不需要使用String.IsNullOrEmpty
检查Nothing
或空字符串,因为=
Visual Basic中的运算符将Nothing和空字符串视为等效.因此,在VB.NET中检查"null或空字符串"的惯用方法是简单地使用= ""
:
Dim s As String = Nothing
If s = "" Then Console.WriteLine("YES") ' Prints YES
Run Code Online (Sandbox Code Playgroud)
因此,Not String.IsNullOrEmpty(s)
,s <> ""
,s <> String.Empty
和s <> vbNullString
都是等效的.我更喜欢简洁s <> ""
,但主要是偏好和风格的问题.
一般来说:没有.一个空字符串,并没有任何的这种等价是唯一真正的VB.NET的内置=
和<>
运营商以及最的方法Microsoft.VisualBasic
命名空间(Len(...)
,Trim(...)
,...).一旦进入纯.NET领域(例如,通过使用其他基类库中的方法),Nothing和空字符串将被区别对待:
Dim sNothing As String = Nothing
Dim sEmpty As String = ""
Console.WriteLine(sEmpty = sNothing) ' True
Console.WriteLine(sEmpty.Equals(sNothing)) ' False
Console.WriteLine(String.Equals(sEmpty, sNothing)) ' False
Console.WriteLine(Len(sEmpty)) ' 0
Console.WriteLine(Len(sNothing)) ' 0
Console.WriteLine(sEmpty.Length) ' 0
Console.WriteLine(sNothing.Length) ' throws a NullReferenceException
Run Code Online (Sandbox Code Playgroud)
vbNullString
定义为Nothing
而不是""
?向后兼容性.在VBA(和"VB Classic")中,vbNullString
可以用来获得"空字符串引用"¹.在VBA中,vbNullString
被视为空字符串""
,但在与非VB代码交互时,vbNullString
被映射到NULL指针""
并被映射到空字符串.
在VB.NET中使用PInvoke时,Nothing
映射到NULL指针并""
映射到空字符串,因此在VB.NET中使遗留常量vbNullString
相等是有意义的Nothing
.
¹这是VBA的完全不同的Null
和Empty
,这是特殊的Variant
亚型,和VBA的Nothing
,这在VBA,仅适用于对象,而不是字符串.
vbNullString是一个常量,更可能是在VB6之外,String.Empty
并且""
是相同的,有人说有性能差异,但事实并非如此,它是你选择使用的.
要检查字符串是否为空,您可以使用If String.IsNullOrEmpty(String)
.优点是它也会检查null,因为string是一个类,因此是一个引用类型.