Оператор Foreach в поле списка

У меня есть проблема с foreach оператором в моем проекте. До сих пор у меня есть код:

    foreach(object i in listboxFiles.Items)
    {
        if (i == ".ftpquota")
        {
            listboxFiles.Items.Remove(i);
        }
        if (i == ".")
        {
            listboxFiles.Items.Remove(i);
        }
        if (i == "..")
        {
            listboxFiles.Items.Remove(i);
        }
    }

У меня есть это в 1 втором таймере. Это получает название товара хорошо, но когда это добирается до if операторы это говорит, что они не соответствуют, но они делают?

5
задан Peter Mortensen 13 June 2012 в 17:17
поделиться

2 ответа

Во-первых, вы изменяете коллекцию , пока перебираете ее. Это не может сработать, значит, ваш код в корне не работает.

Есть несколько способов исправить это; самым простым в вашем случае было бы скопировать коллекцию элементов, перебирая копию и изменяя (= удаляя) оригинал:

var items = new System.Collections.ArrayList(listboxFiles.Items);

foreach (var item in items) {
    if (item.Equals("."))
        listboxFiles.Items.remove(item);
    …
}

Во-вторых, вы сравниваете объект со строкой , следовательно, оператор == выполняет проверку равенства, а не проверку равенства строк. Либо используйте Equals , либо выполните соответствующее приведение.

6
ответ дан 14 December 2019 в 04:36
поделиться

Проверка равенства не работает, потому что сначала нужно привести к строке и выполнить соответствующее сравнение строк.

например,

if (string.Equals((string)i, ".ftpquota", StringComparison.Ordinal))

Если вы удаляете элементы из коллекции элементов во время итерации по коллекции, вы вполне можете столкнуться с проблемой. Один из способов обойти эту проблему - начать с последнего элемента и считать назад, таким образом, любые удаления не повлияют на оставшиеся элементы коллекции, например

for(var i = listboxFiles.Items.Count - 1; i >= 0; --i)
{
    var item = listboxFiles[i];
    if (...)
    {
        listboxFiles.Items.RemoveAt(i);
    }
}
2
ответ дан 14 December 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: