字符串空与“” [关闭]
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.IsNullOrEmpty
和string.IsNullOrWhitespace
。
【讨论】:
以上是关于字符串空与“” [关闭]的主要内容,如果未能解决你的问题,请参考以下文章