【问题标题】:String null vs "" [closed]字符串空与“” [关闭]
【发布时间】:2014-12-18 05:05:12
【问题描述】:

好的,我正在将某人的代码从 VB.Net 转换为 C#。我想知道是否将字符串设置为“”,是否与将其设置为 null 相同?比如下面的代码:

string word = "";
bool boolValue = false;

if(string == null)
{
  boolValue = true;
}

那么这最终会将 boolValue 设置为 true,还是将 word 设置为 "" 或 null 两个不同的东西?我的直觉告诉我这是不同的。那个 "" 只是使它成为一个空字符串。

【问题讨论】:

  • 你为什么不试着找出答案?
  • 在这个主题上,一个鲜为人知的函数是string.IsNullOrEmpty(myString),它可以测试两种情况。还有 string.IsNullOrWhiteSpace 额外测试空白。
  • @alykins 实际上它们是不同的。 IsNullOrWhiteSpace 将为字符串 " " 返回 true,而 IsNullOrEmpty 返回 false。
  • @Jared.Rodgers 这个网站实际上通常鼓励你在来这里之前尝试并失败。这可能就是你得到一堆反对票的原因。我不介意帮助别人学习,但只是尝试一下就有很多话要说(在这种情况下:很容易做到)。

标签: c# vb.net null


【解决方案1】:

您的困惑可能源于 VB 在应用于字符串时“无”的模棱两可/不一致的概念,具体取决于使用的是 '=' 还是 'Is' 运算符,如以下示例所示:

Dim s1 As String = ""
If s1 = Nothing Then MsgBox("= Nothing") 'true
If s1 Is Nothing Then MsgBox("Is Nothing") 'false

Dim s2 As String = Nothing
If s2 = Nothing Then MsgBox("= Nothing") 'true - both 'Nothing' and "" pass the "= Nothing" test!
If s2 Is Nothing Then MsgBox("Is Nothing") 'true

C# 字符串没有歧义。

【讨论】:

    【解决方案2】:

    不,它不是同一个字符串。如果字符串为空,则不分配对象。这意味着你不能访问这个字符串——你会得到异常。但是,如果字符串是"",它现在是分配的对象,您可以访问该对象(您可以获得该字符串的长度,在这种情况下将为 0)。

    【讨论】:

      【解决方案3】:

      不,它们绝对不是一回事。 "" 是一个空字符串。 null 是没有任何值。

      .NET 有许多实用方法可以帮助您检查不同的情况。您可以查看string.IsNullOrEmptystring.IsNullOrWhitespace

      【讨论】:

        猜你喜欢
        • 2016-07-27
        • 1970-01-01
        • 2016-08-05
        • 2012-12-16
        • 2017-09-07
        • 2014-08-30
        • 2012-09-11
        • 2014-11-27
        • 1970-01-01
        相关资源
        最近更新 更多