Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# String.IsNullOrEmpty未检测到C中的转义序列NULL\0#_C#_String_Null_Escaping_Isnullorempty - Fatal编程技术网

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

C# String.IsNullOrEmpty未检测到C中的转义序列NULL\0#,c#,string,null,escaping,isnullorempty,C#,String,Null,Escaping,Isnullorempty,我尝试了下面的if语句,但if未能检测到NULL void Main() { string str = "\0".Trim(); if (string.IsNullOrEmpty(str)) { "Empty".Dump(); } else { "Non-Empty".Dump(); } } 请参考LinqPad快照 我得到了输出 Non-Empty 我不知道它是如何失败的。请帮助我。您的字符串包含一个

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

void Main()
{
    string str = "\0".Trim();
    if (string.IsNullOrEmpty(str))
    {
        "Empty".Dump();
    }
    else
    {
        "Non-Empty".Dump();
    }
}
请参考LinqPad快照

我得到了输出

Non-Empty

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

您的字符串包含一个字符
\0

此字符不可打印,因此您在手表中看不到它,但如果将
str.Length
添加到手表中,您将看到“1”

那么,字符串是否为空?当然没有,是空的吗?不,它包含字符。
因此,
string.IsNullOrEmpty
在逻辑上导致
false
,并输出“Non-Empty”

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

string str = "\0".Trim(new[] { '\0', ' ', '\t' });
if (string.IsNullOrEmpty(str))
{
    "Empty".Dump();
}
else
{
    "Non-Empty".Dump();
}
这将输出“空”


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

输出是正确的。字符串不是空的,它包含一个
'\0'
。在C语言中,字符串以二进制零结尾,在C语言中,没有这样的约定。也许是LinqPad用这种方式表示的?我在VS 2013中尝试过,值“\0”被替换,您可以从字符串中删除所有\0。您能详细说明为什么希望非空字符串为空吗?@PatrickHofman我粗略计算了转义字符,因为我注意到
\0
表示为
null
。我是初学者,所以我在
string.IsNullorEmpty
中尝试了这个
\0
,但失败了。这就是我发布这个问题的原因。为什么你要删除
IsNullOrWhiteSpace
,哪一个更适合这个问题?@patrickhoffman我决定使用
IsNullOrEmpty
,因为它更接近OP的代码,而且
Trim()
保证如果字符串只是空白,它将变为空。然而,你是对的,
IsNullOrWhiteSpaces
比仅仅修剪空白和标签更聪明,所以我在评论中提到了它。非常感谢。