Как я могу определить пустую строку, когда ее содержимое \ 0 \ 0 \ 0 \ 0 - PullRequest
1 голос
/ 15 апреля 2011

У меня есть переменная SizeOfData byte[4], которая возвращает:

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?

Ответы [ 4 ]

4 голосов
/ 15 апреля 2011

Немного магии linq

if (bytes.All(b => b == 0))

или чуть лучше

if (bytes.Any(b => b != 0))
2 голосов
/ 15 апреля 2011

когда я смотрю на строку в Visual Studio, в ней ничего нет

Я имею в виду, что вы подразумеваете, что когда вы наводите курсор мыши на строку вотладчик (или добавить часы, или осмотреть местных жителей, или просмотреть визуально представление строки), он кажется пустым.Это потому, что \0, как и некоторые другие символы, является непечатным символом.Эти символы присутствуют, но они не вызывают визуального эффекта.

Если вы хотите определить, равен ли байтовый массив только нулю, это просто:

(Примечаниечто указанное выше имя массива недопустимо, поэтому я назову его data)

if(data.Add(b => b == 0))
{
    // is only null characters
}

Однако кажется, что вам нужно что-то более надежное и что-то, что могло бы работатьстроки.Вы можете использовать простой RegEx для замены диапазона непечатаемых символов Unicode (я знаю, что ваша исходная строка, как в ASCII, но когда вы анализируете ее, она сохраняется внутри как UTF-16):

yourString = Regex.Replace(yourString, "[\x00-\x1F]", "");

В этот момент string.IsNullOrEmpty(yourString) должно вернуть true.

1 голос
/ 15 апреля 2011

Перед преобразованием в строку вы можете:

bool isNulls = SizeOfData.All(x => x == 0);
0 голосов
/ 15 апреля 2011

Если вы можете обработать это раньше, вы можете проверить байтовый массив:

if(SizeOfData.Any(b => b != 0))
    // do something
else
    // do something else
...