字符串空与“” [关闭]

Posted

技术标签:

【中文标题】字符串空与“” [关闭]【英文标题】: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 额外测试空白。 相关:Why is the default value of the string type null instead of an empty string? @alykins 实际上它们是不同的。 IsNullOrWhiteSpace 将为字符串 " " 返回 true,而 IsNullOrEmpty 返回 false。 @Jared.Rodgers 这个网站实际上通常鼓励你在来这里之前尝试并失败。这可能就是你得到一堆反对票的原因。我不介意帮助别人学习,但只是尝试一下就有很多话要说(在这种情况下:很容易做到)。 【参考方案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

【讨论】:

以上是关于字符串空与“” [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

第03期:列非空与自增

尝鲜 Dart 2.7 最新语法之可空与非空类型

尝鲜 Dart 2.7 最新语法之可空与非空类型

javascript 空与未定义

javascript 空与未定义

非空与 jquery.each