在我的代码中,我有一个IEnumerable:
IEnumerable<SomeType> listOfSomething = MethodWhichReturnsAnIEnumerable(param 1)
现在,listOfSomething
中的每个元素都包含其他内容的列表,我们称之为listOfRules
。我需要返回listOfSomething
中listOfRules
中包含&gt; 0元素的元素:
var result = listOfSomething.Where(x => x.listOfRules.Count > 0);
这对表现意味着什么? listOfRules
是List
所以我很好奇调用Count
会对IEnumerable listOfSomething
做些什么,因为它是否会将所有内容都放入内存。
答案 0 :(得分:2)
由于listOfRules
是List
,查询Count
属性的速度非常快,因为对于List
,它只返回私有字段的值,而不是每次都迭代整个集合。这是一个实现,取自here:
// Read-only property describing how many elements are in the List.
public int Count {
get {
Contract.Ensures(Contract.Result<int>() >= 0);
return _size;
}
}
答案 1 :(得分:1)
如果listOfRules
是使用List<T>
的{{1}},则只返回它不会枚举该集合的存储值。它与Count
无关,listOfSomething
将被枚举,并且每个列表都会调用listOfSomething
属性。所以没有什么可担心的。
答案 2 :(得分:0)
list.Count
只返回字段的值,所以非常快。 O(1)
因此,您的整体表现将为O(N),其中N是listOfSomething
中的记录数。