Я знаю, что 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, потому что это приведет к двойному извлечению данных из БД. Однако я не был уверен в списках памяти. Я бы удалил вопрос, если бы мог ;-)