所有这些
txtUsername.Text <> vbNullStringtxtUsername.Text <> String.EmptytxtUsername.Text <> ""似乎返回相同的结果.那么vbNullString,String.Empty和之间的区别是""什么?
Hei*_*nzi 17
String.Empty并且""都表示长度为零的字符串.
与声称" [r]表示零长度字符串 " 的文档相反,实际上是(在C#中,参见参考源).vbNullStringvbNullStringNothingnull
(请注意,这仅适用于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是一个类,因此是一个引用类型.
| 归档时间: |
|
| 查看次数: |
6271 次 |
| 最近记录: |