2015-04-01 29 views
0

在我的代碼的元素中的列表上我有一個IEnumerable:調用.Count中包含一個IEnumerable

IEnumerable<SomeType> listOfSomething = MethodWhichReturnsAnIEnumerable(param 1) 

現在,listOfSomething每個元素,還含有其他的東西的清單讓我們把它listOfRules。我需要在listOfSomething已在其listOfRules> 0元素返回的元素:

var result = listOfSomething.Where(x => x.listOfRules.Count > 0); 

這是什麼意思的表現? listOfRules是一個List所以我很好奇Count將做什麼IEnumerable listOfSomething是否它會把所有內容。

回答

2

由於listOfRulesList,查詢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

如果listOfRulesList<T>使用Count只返回存儲的值不會枚舉集合。它與listOfSomething無關,listOfSomething將被枚舉,Count屬性將在每個列表中調用。所以沒有什麼可擔心的。

+0

感謝您的回答。你和@nikis都認爲它對性能影響不大,我不應該擔心。 Shoaib說這對性能不好,我應該用Any()來代替。你會使用.Any()? – DSF 2015-04-01 10:14:23

+0

@ D.Singh他已經編輯了他的答案 – nikis 2015-04-01 10:24:23

0

list.Count只是返回一個字段的值,所以非常快。 O(1) 因此,您的整體表現將爲O(N),其中N是listOfSomething中的記錄數。