Ответ 1
Я не понимаю, почему это не удается.
Я предполагаю, что ваш вопрос тогда "почему это не удается?" (Вы забыли на самом деле задать вопрос в своем вопросе.)
Метод "Where()", очевидно, не возвращает исходную коллекцию
Правильно. "Where" возвращает IEnumerable<T>
, который представляет коллекцию с фильтром, помещенным поверх нее.
поэтому я не перечисляю вокруг оригинальной коллекции, когда пытаюсь удалить что-то из нее.
Неправильно. Вы перечисляете оригинальную коллекцию. Вы перечисляете исходную коллекцию с фильтром, помещенным поверх нее.
Когда вы вызываете "Где", он не с нетерпением оценивает фильтр и не создает совершенно новую копию оригинальной коллекции с применяемым к ней фильтром. Скорее, он дает вам объект, который перечисляет исходную коллекцию, но пропускает элементы, которые не соответствуют фильтру.
Когда вы находитесь в магазине, и вы говорите: "Покажи мне все", парень, показывающий тебе, все показывает тебе все. Когда вы говорите "теперь просто покажите мне яблоки, которые стоят от 1 до 5 долларов за килограмм", вы не строите совершенно новый магазин, в котором есть только яблоки. Вы смотрите на ту же коллекцию вещей, что и раньше, только с фильтром на ней.