Множественное перечисление IEnumerable

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

Рассмотрим следующий фрагмент кода:

    static void Main(string[] args)
    {

        List<string> testList = new List<string> {"Test", "Test1", "Test1"};
        IEnumerable<string> filtered = testList.Where(x => x == "Test1");

        DoSomeWork(filtered);
        DoSomeMoreWork(filtered);
    }

    public static void DoSomeWork(IEnumerable<string> items)
    {
        foreach (var item in items)
        {
            Console.WriteLine("do some work");
        }
    }

    public static void DoSomeMoreWork(IEnumerable<string> items)
    {
        foreach (var item in items)
        {
            Console.WriteLine("do some more work");
        }
    }

Я прав, что это приводит к тому, что не только два элемента в "отфильтрованном" повторяются дважды, но и фактически элементы в "testList"? Итак, учитывая, что «testList» был большим списком из 10000 элементов, а «отфильтрованный» сокращает его до 10 элементов, было бы разумнее сделать «фильтрованный» список (также можно использовать var и просто добавить ToList () в конце)

РЕДАКТИРОВАТЬ: Это самый неприятный вопрос, который я когда-либо задавал здесь. Я знал, что было бы плохо повторять, например, IQueryable, потому что это приведет к двойному извлечению данных из БД. Однако я не был уверен в списках памяти. Я бы удалил вопрос, если бы мог ;-)

6
задан Christoph 20 October 2011 в 15:17
поделиться