String null vs ""

本文关键字:quot vs null String | 更新日期: 2023-09-27 18:27:25

好的,所以我正在将某人的代码从VB.Net转换为C#。我想知道一个字符串是否被设置为",这和它被设置为null是一样的吗?例如,以下代码:

string word = "";
bool boolValue = false;
if(string == null)
{
  boolValue = true;
}

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

String null vs ""

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

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

不,它不是同一个字符串。如果字符串为null,则不会为其分配对象。这意味着您无法访问此字符串,您将获得异常。然而,如果字符串是"",那么它现在被分配为对象,并且您可以访问该对象(您可以获得该字符串的长度,在这种情况下为0)。

您的困惑可能源于VB在应用于字符串时对"Nothing"的模糊/不一致概念,这取决于是否使用了"="或"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#字符串没有歧义。