String.IsNullOrEmpty 未检测到 C# 中的转义序列 NULL \0

String.IsNullOrEmpty is not detecting the Escape sequence NULL \0 in C#

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

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

请参考LinqPad快照

我得到了输出

Non-Empty

我不知道它是怎么失败的。请帮助我。

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

那么,您的字符串是否为空?当然,不。它是空的吗?不,它包含字符。
因此,string.IsNullOrEmpty 逻辑结果为 false 并输出 "Non-Empty".

如果由于某种原因您收到包含 [=11=] 个字符的字符串并想将其视为空字符串,您也可以 trim [=11=]

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

这将输出 "Empty".

根据 Patrick Hofman 的建议,最好使用 string.IsNullOrWhiteSpace,因为它更适合这种情况,并且可以处理范围更广的白色-space、不可见的 BOM 字符等..