.Where(x=> x.listFoos.Count() > 1) 是否计算所有子元素?

Dra*_*rop 0 c# linq

给定一个具有 List 类型属性的对象列表:

class Bar{
   public List<Foo> Foos{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

下面的代码会选择所有具有多个 Foo 的栏,计算所有 Foos 吗?
或者它会在 2 Foos 处停止迭代?

var input = new List<Bar>();
var result = input.Where(x=> x.Foos.Count()>1).ToList();
Run Code Online (Sandbox Code Playgroud)

Hei*_*nzi 5

不会算什么。List<T>冗余存储元素的数量,因此访问该Count属性是一个O(1)操作

即使您使用Enumerable.Count()扩展方法而不是List<T>s 内置Count属性,这Enumerable.Count() 也有效,因为如果基础数据源实现ICollection<T>.


正如在评论中提到的Enigmativity:如果你有一个IEnumerable这是不是一个ICollection<T>,你可以改用以下,以防止迭代整个枚举:

var result = input.Where(x => x.Foos.Skip(1).Any()).ToList();
Run Code Online (Sandbox Code Playgroud)