【发布时间】:2011-10-20 07:39:56
【问题描述】:
我知道 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 个项目的大列表,而“filtered”将其减少到 10 个项目,将“filtered”制作成一个列表会更聪明(也就是使用 var 并在末尾附加 ToList())
编辑: 这是我在这里问过的最尴尬的问题。例如,我知道迭代 IQueryable 会很糟糕,因为这会导致从数据库中获取数据两次。但是我不确定内存列表。如果可以的话,我会删除这个问题;-)
【问题讨论】:
标签: linq ienumerable