Строка из label.text странное поведение - PullRequest
0 голосов
/ 12 сентября 2018

Итак, у меня Label инициализируется WebService .Я хочу посмотреть, содержит ли этот ярлык запятые .Проблема в том, что даже если метка имеет запятые , Contains() возвращает false и если я сделаю Split(), массив будет иметь длину только 1 , содержащую вся строка .

// text is "255,255,0,0"
string wat = myLabel.Text;
string[] wats = wat.Split(',');

// This IF never happens, for some reason
if (wat.Contains(","))
{
    anotherLabel.Text = wats[0] + " VS " + wats[1];
}

Почему не работают Split() и Contains()?Может ли это быть другое кодирование в строке, которая идет от метки?Если я сделаю wat = wat + ",", то Contains() вернет True.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Символы Юникода часто странные . Unicode имеет много запятых , например

string wat = "255,255,0,0"; // Full range commas

bool hasComma = wat.Contains(','); // false

Если wat.Contains(',') возвращает false, то разделители не являются запятыми ,. Вы можете проверить это с string раскодированным:

string wat = myLabel.Text;

// Let's have a close look at wat: which characters (codes included) does it contain
MessageBox.Show(
  $"wat: [{wat}] encoded as {string.Join(" ", wat.Select(c => ((int)c).ToString("x4")))}");

Вы должны получить

Вт: [255 255,0,0] закодировано как 0032 0035 0035 002c 0032 0035 0035 002c 0030 002c 0030

если не проверьте, какой код (ы) символов у вас есть вместо ожидаемого 002c.

0 голосов
/ 12 сентября 2018

Следующая строка всегда будет иметь значение false:

if (wats.Contains(","))

string.Split (',') будет возвращать только значения между запятыми, если вы указали запятую в качестве разделителя.Ни один из элементов в массиве никогда не будет содержать запятую.

Если вы хотите проверить, содержит ли текст вашей метки запятые, просто сделайте:

if (lblteste.Text.Contains(','))
...