【发布时间】:2020-09-10 11:35:48
【问题描述】:
给定一个具有 List 类型属性的对象列表:
class Bar{
public List<Foo> Foos{get;set;}
}
以下代码是否会选择所有包含多个 Foo 的条形图,计算所有 Foos?
还是会在 2 Foos 时停止迭代?
var input = new List<Bar>();
var result = input.Where(x=> x.Foos.Count()>1).ToList();
【问题讨论】:
-
代码,如图所示,不会计算任何 Foos,因为 Where 是惰性求值的。
-
另一种方法是使用
input.Skip(1).Any(),以防止迭代整个可枚举(即当它不是ICollection<T>时)。 -
在使用 LinQ Count() 时,您希望枚举某些内容。在 Where 子句中限制此计数“是否有多个项目?”期望只计数到 1 是正常的。这与问题的计数相矛盾。
-
@Enigmativity:我冒昧地将您的评论添加到我的答案中(太有用了,不能在评论中丢失)。