C# 字符串null vs“”

C# 字符串null vs“”,c#,vb.net,null,C#,Vb.net,Null,好的,我正在将某人的代码从VB.Net转换为C。我想知道字符串是否设置为,是否与设置为null相同?例如,下面的代码: string word = ""; bool boolValue = false; if(string == null) { boolValue = true; } 那么,最终会不会将boolValue设置为true,或者将word设置为null或两个不同的值?我的直觉告诉我这是不同的。这只会使它成为一个空字符串。不,它们绝对不是同一回事。是一个空字符串。null表示没

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

string word = "";
bool boolValue = false;

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

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

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


.NET有许多实用方法可帮助您检查不同的情况。您可以签出和。

不,它不是同一个字符串。如果字符串为空,则它不是已分配的对象。这意味着您无法访问此字符串-您将得到异常。但是,如果字符串为,则它现在已分配给对象,并且您可以访问此对象,您可以获得该字符串的长度,在这种情况下该字符串的长度为0

您的困惑可能源于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字符串没有歧义。

为什么不试试看呢?关于这个主题,一个鲜为人知的函数是string.IsNullOrEmptymyString,它测试两种情况。还有string.IsNullOrWhiteSpace,它额外测试空白。相关:@alykins实际上它们是不同的。IsNullOrWhiteSpace将为字符串返回true,而IsNullOrEmpty将返回false。@Jared.Rodgers此站点实际上通常鼓励您在来到这里之前尝试并失败。这可能就是为什么你会得到很多反对票。我不介意帮助别人学习,但在这种情况下,只要尝试一下就可以说很多:很容易做到。