为什么string.IsNullOrWhiteSpace("\ 0")为false

Sho*_*oar 6 .net string c#-4.0

我遇到了一个问题,其中隐形字符\0非常像"白色空间",不被字符串视为空白.IsNullOrWhiteSpace方法.我想知道为什么这样在.NET中以这种方式实现,是否有任何替代string.IsNullOrWhiteSpace可以正确处理空终止字符?提前致谢.

Jon*_*eet 19

U + 0000基本上不是空白.char.IsWhitespace('\0')返回false,它没有列为空格...

的部分IsNullOrWhitespace是指串引用本身-没有内容,如果这就是你所想的.

请注意,.NET中的字符串在托管代码中不是逻辑上"空终止"的,尽管在CLR级别实际上它们是互操作的.(字符串知道自己的长度,但为了使其更容易与本地代码的工作确实希望空终止时,CLR确保总有一个U + 0000字符串的内容后).如果你结束了包含\0你的字符串可能应该修复它开始生成的任何内容.

  • @Shoar:不,那不是空白的定义.它可能是"不可打印的字符"的定义,但这与空白不同.这不是.NET决定的问题 - 这是Unicode类别的问题. (2认同)

Cyr*_*ral 5

您可以将所有\0字符替换为空格字符,然后检查空格。

string.IsNullOrWhiteSpace("\0".Replace('\0', ' ');
Run Code Online (Sandbox Code Playgroud)