Items
- это массив строк вида
{
"ID:AZ22",
"ID:TR56",
...
}
Метод
Items.Contains(checkForString)
проверяет, содержит ли массив Items
строку checkForString
, то есть каждый элемент сравнивается, равен ли он checkForString
. Поскольку все строки в элементах содержат часть "ID:"
, ни одна из строк не равна "AZ22"
. Вы можете решить эту проблему, сравнив записи с "ID:AZ22"
- если вы хотите сохранить идентификатор, как в вашем коде, это будет возможно с
Items.Contains($"ID:{checkForString}")
Вы можете - однако - удалить "ID:"
сразу с
Items = dataString.Split(';')
.Select(s => s.Substring(3))
.ToArray();
Конечно, в этом случае вам не нужно добавлять "ID:"
к Contains
.
Редактировать: Для обработки недопустимого ввода
Если вы получили ошибку
startIndex
не может быть больше длины строки.
это означает, что любая из строк в массиве не иметь форму "ID:XXXXX"
. В этом случае вы можете отфильтровать элементы перед удалением префикса
Items = dataString.Split(';')
.Where(IsValidId)
.Select(s => s.Substring(3))
.ToArray();
с помощью
private bool IsValidId(string s)
{
return s.StartsWith("ID:") && s.Length > 3;
}
Возможно, проблема в том, что исходная строка заканчивается на ;
. В этом случае Split
возвращает пустую строку как последний элемент. Это может быть смягчено с помощью StringSplitOptions
Items = dataString.Split(new[]{';'}, StringSplitOptions.RemoveEmptyEntries)
.Select(s => s.Substring(3))
.ToArray();