3

我尝试了以下 if 语句,但 if 未能检测到 NULL

void Main()
{
    string str = "\0".Trim();
    if (string.IsNullOrEmpty(str))
    {
        "Empty".Dump();
    }
    else
    {
        "Non-Empty".Dump();
    }
}

请参考 LinqPad 快照

在此处输入图像描述

我得到了输出

Non-Empty

我不知道它是如何失败的。请帮助我。

4

1 回答 1

7

您的字符串包含一个字符\0
这个字符是不可打印的,所以你在Watches中看不到它,但是如果你添加str.Length到watches中,你会看到“1”。

那么,您的字符串是否为空?绝对没有。是空的吗?不,它包含字符。
因此,string.IsNullOrEmpty逻辑结果为false并输出“非空”。

如果由于某种原因您收到包含\0字符的字符串并希望将其视为空字符串,您也可以修剪\0

string str = "\0".Trim(new[] { '\0', ' ', '\t' });
if (string.IsNullOrEmpty(str))
{
    "Empty".Dump();
}
else
{
    "Non-Empty".Dump();
}

这将输出“空”。

正如 Patrick Hofman 所建议的,最好使用它,string.IsNullOrWhiteSpace因为它更适合这种情况,并且可以处理更广泛的空白、不可见、BOM 字符等。

于 2017-05-10T09:00:06.917 回答