Погуглил но че то не понимаю. Это ложное предупреждение или нет ?
ienumerable вообще не комильфо проматывать несколько раз, это интерфейс предназначенный для однократной промотки. Некоторые реализации контейнеров могут позволить промотать несколько раз, но другие позволят лишь раз, а на второй промотке не вернут ничего. Поэтому это предупреждение стоит принять во внимание и, если тебе прямо нужно пробегать несколько раз, переведи ienumerable в тот же list
enumerable может подтягиваться из сети например, и если ты два раза по нему пройдешься, то ты два раза вытянешь данные из сети
ну вообще нет) метод Reset не просто так придумали и невозможность повторной энумерации скорее исключение
Если моя коллекция будет всегда локальной и мне все ровно надо будет 2 раза перечислять их методами например Any и Count то выходит что предупреждение ложное ?
Лучше заменить IEnumerable на более подходящий тип
сейчас у тебя будет работать, но в будущем в ходе развития кода реализация коллекции может запросто измениться, что приведёт к баге. Это плохая практика - полагаться на конкретную реализацию, лучше сразу обезопаситься переводом в список/массив/IReadonlyCollection
Понимаю но меня беспокоит именно тот вопрос. Что если к локальной колекции будет выполнятся запрос например Last() или .Where() Все ровно оно будет перечислятся вверно ? Тогда выходит что предупреждение ложное ?
какого типа коллекция?
Ienumerable<T>
Предупреждение не ложное, он ж корректно тебя предупреждает что сюда может прийти одноразовый ienumerable и все сломается. Если ты не будешь вызывать функцию с таким аргументом, то все норм, го предупреждение все равно остаётся корректным
что значит одноразовый IEnumerable ?
Который можно проитерировать только один раз
Как может такое случится ?
пример можно ?
Такой пример сложно придумать Но можно придумать пример, который будет очень долго итерироваться: IEnumerable<int> GetFriendsIdsFromVk(){ return vkClient.GetFriends().Select(f => f.Id); }
Да нет, вообще-то именно просто так придумали. Вот что говорит документация: > The Reset method is provided for COM interoperability. It does not necessarily need to be implemented Я не знаю нормальных сценариев, в которых этот метод используется.
Тогда лучше напиши нормальный код поверх своей коллекции, не пользуясь LINQ. Быстрее будет работать.
Обсуждают сегодня