Как удалить элемент из списка без использования «Содержит»?

У меня есть этот код:

for (int i = listboxWork.Items.Count-1; i > -1; i--) 
{
    if (listboxWork.Items[i].Contains(tblSent))
    {
        listboxWork.Items.RemoveAt(i);
    }
}

... который я получил из здесь, но моя скрипучая старая версия . NET (или, может быть, проблема в моей жалкой версии .NET (Compact Framework)), не содержит «Содержит».

Я думаю, что я мог бы заменить эту строку на:

if (listboxWork.Items[i].ToString().IndexOf(tblSent) > -1)

... но я не слишком уверен, что это лучший способ сделать это. Есть ли более приемлемый способ?


person B. Clay Shannon    schedule 07.10.2014    source источник
comment
массив может не иметь оператора contains, но вы уверены, что объект списка не имеет? Вы можете перевернуть список и выполнить foreach.   -  person crthompson    schedule 07.10.2014


Ответы (1)


Items — это набор объектов, поэтому вам нужно преобразовать элемент, с которым вы работаете, в строку, прежде чем вы сможете использовать Contains:

if (listboxWork.Items[i].ToString().Contains(tblSent))

Изменить: поскольку это CompactFramework (которую я не смог распознать в посте изначально, правильное решение - использовать String.IndexOf, который уже был идентифицирован.

Это вполне приемлемый механизм, но если CF его поддерживает, я бы настоятельно рекомендовал использовать сравнение без учета регистра, особенно если в оценке участвует какой-либо пользовательский ввод:

if (x.Items[0].ToString().ToLower().IndexOf(tblSent.ToLower()) != -1)
person competent_tech    schedule 07.10.2014
comment
Это разумно, но даже сделать это таким образом (правильно) невозможно в этой версии .NET с вызовом содержимого, с которой я застрял. - person B. Clay Shannon; 07.10.2014
comment
@B.ClayShannon: ранее я упустил из виду проблему CF; вы можете настроить теги в своем вопросе, чтобы включить это. Я обновил свой ответ с дополнительной информацией. - person competent_tech; 07.10.2014
comment
Что ж, это разочаровывает. Я забыл, насколько ограничивающим был CF. Последний подход (если сравнение включает пользовательский ввод) состоит в том, чтобы преобразовать все в нижний (или верхний) регистр перед выполнением сравнения. Я обновил ответ с помощью этого подхода. - person competent_tech; 07.10.2014
comment
Да; CF расшифровывается как Cheesy and Frustrating. - person B. Clay Shannon; 07.10.2014