vbNullString txtUsername.Text <> String.Empty txtUsername.Text <> "" 似乎返回相同-6ren">
gpt4 book ai didi

vb.net - vbNullString、String.Empty 和 ""之间有什么区别?

转载 作者:行者123 更新时间:2023-12-03 15:05:24 54 4
gpt4 key购买 nike

所有这些

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

  • 似乎返回相同的结果。那么, vbNullString 和有什么区别? , String.Empty"" ?

    最佳答案

    有什么不同?

  • String.Empty""两者都表示长度为零的字符串。
  • the documentation相反, 声称 vbNullString "[r] 表示零长度字符串", vbNullString实际上是 Nothing ( null 在 C# 中,参见 Reference Source )。

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

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

    与其他答案所说的相反,您不需要使用 String.IsNullOrEmpty检查 Nothing或空字符串,因为 = Visual Basic 中的运算符将 Nothing 和空字符串视为等效的。因此,在 VB.NET 中检查“空或空字符串”的惯用方法是简单地使用 = "" :
    Dim s As String = Nothing
    If s = "" Then Console.WriteLine("YES") ' Prints YES

    因此, Not String.IsNullOrEmpty(s) , s <> "" , s <> String.Emptys <> vbNullString都是等价的。我更喜欢简洁的 s <> "" ,但这主要是偏好和风格的问题。

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

    一般来说:没有。空字符串和Nothing 的这种等价性仅适用于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

    为什么是 vbNullString定义为 Nothing而不是 "" ?

    向后兼容性。在 VBA(和“VB Classic”)中, vbNullString可用于获取“空字符串引用”¹。在 VBA 中, vbNullString被视为空字符串 "" ,但是当与非 VB 代码交互时, vbNullString was mapped to the NULL pointer and "" was mapped to an empty string .

    在 VB.NET 中使用 PInvoke 时, Nothing映射到 NULL 指针和 ""映射到一个空字符串,因此使用遗留常量 vbNullString 是有意义的。等于 Nothing在 VB.NET 中。

    ¹ 与 VBA 的 Null 完全不同和 Empty ,这是特别的 Variant子类型和 VBA Nothing , 在 VBA 中,它只适用于对象而不适用于字符串。

    关于vb.net - vbNullString、String.Empty 和 ""之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23130320/

    54 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com