当内容为\\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0时,如何确定一个空字符串

问题描述

|| 我有一个Of0ѭ的SizeOfData变量,它返回:
byte[0] == 0
byte[1] == 0
byte[2] == 0
byte[3] == 0
当我执行
Encoding.ASCII.GetString(SizeOfData)
时,字符串变量的长度为4,而
String.IsNullOrEmpty()
返回false,但是当我在Visual Studio中查看字符串时,其中没有任何内容。 我如何确定它是否包含所有\\ 0 \\ 0 \\ 0 \\ 0,然后是否X否则为Y?     

解决方法

一点linq魔术
if (bytes.All(b => b == 0))
或稍微好一点
if (bytes.Any(b => b != 0))
    ,  当我在Visual Studio中查看字符串时,其中没有任何内容 我假设的意思是,当您将鼠标悬停在调试器中的字符串上(或添加手表,检查本地对象或以其他方式查看字符串的可视表示形式)时,它似乎是空的。这是因为“ 6”与其他一些字符一样是不可打印的字符。这些字符在那里,但不会引起视觉效果。 如果要确定字节数组是否仅为零,则很简单: (请注意,您上面的数组名称无效,因此我将其命名为
data
if(data.Add(b => b == 0))
{
    // is only null characters
}
但是,您似乎想要更强大的功能,并且可以在字符串上使用。您可以使用简单的RegEx替换不可打印的Unicode字符的范围(我知道您的原始字符串为ASCII,但是一旦解析它,它就会以UTF-16的形式存储在内部):
yourString = Regex.Replace(yourString,\"[\\x00-\\x1F]\",\"\");
此时,“ 10”应返回“ 11”。     ,在转换为字符串之前,您可以:
bool isNulls = SizeOfData.All(x => x == 0);
    ,如果可以更早地处理它,则可以检查字节数组:
if(SizeOfData.Any(b => b != 0))
    // do something
else
    // do something else