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

3 c# string null escaping isnullorempty

我尝试了以下if语句但是如果无法检测到NULL

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

请参考LinqPad快照

在此输入图像描述

我得到了输出

Non-Empty
Run Code Online (Sandbox Code Playgroud)

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

Yel*_*yev 7

您的字符串包含一个字符\0.
此字符是不可打印的,因此您在手表中看不到它,但如果添加str.Length到手表,您将看到"1".

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

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

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

这将输出"Empty".

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