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 字符等..
我尝试了以下 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 字符等..