vbNullString,String.Empty和“”之间有什么区别?

时间:2014-04-17 10:12:43

标签: vb.net string-comparison

所有这些

  • txtUsername.Text <> vbNullString
  • txtUsername.Text <> String.Empty
  • txtUsername.Text <> ""

似乎返回相同的结果。那么,vbNullStringString.Empty""之间的区别是什么?

2 个答案:

答案 0 :(得分:16)

有什么区别?

(请注意,这仅适用于VB.NET!VBA的情况有所不同,详见下文。)

那么如何检查字符串是否为空/无或空?

与其他答案所说的相反,您不需要使用Nothing来检查null或空字符串,因为Visual Basic中的String.IsNullOrEmpty运算符会处理Nothing和空字符串等效。因此,在VB.NET中检查“null或空字符串”的惯用方法是简单地使用Nothing

=

因此,= ""Dim s As String = Nothing If s = "" Then Console.WriteLine("YES") ' Prints YES Not String.IsNullOrEmpty(s)s <> ""都是等效的。我更喜欢简洁的s <> String.Empty,但它主要是偏好和风格的问题。

这是否意味着我可以互换使用空字符串和Nothing?

一般来说:没有。空字符串和Nothing的等效性仅适用于VB.NET的内置s <> vbNullStrings <> ""运算符以及=命名空间中的大多数方法({{1} },<>,...)。一旦进入纯.NET领域(例如,通过使用其他基类库中的方法),Nothing和空字符串将被区别对待:

Microsoft.VisualBasic

为什么Len(...)定义为Trim(...)而不是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

向后兼容性。在VBA(和“VB Classic”)中,vbNullString可用于获取“空字符串引用”¹。在VBA中,Nothing被视为空字符串"",但在与非VB代码进行交互时,{{3}}。

在VB.NET中使用PInvoke时,vbNullString被映射到NULL指针,而vbNullString被映射到空字符串,因此将遗留常量""相等是有意义的VB.NET中的Nothing

¹与VBA的""vbNullString(特殊Nothing子类型)和VBA Null完全不同,VBA的Empty仅适用于对象和不要串。

答案 1 :(得分:7)

vbNullString是一个常量,更可能是在VB6之外,String.Empty""是相同的,有人说有性能差异,但事实并非如此,这是你的选择你的选择使用

要检查字符串是否为空,您可以使用If String.IsNullOrEmpty(String)。优点是它还会检查 null ,因为string是一个类,因此是一个引用类型。