2016-01-22 62 views
1

我試着這樣做:爲什麼IList <T>不包含Length屬性?

int listAverage = NumberList.Sum()/NumberList.Length; 

其中NumberListIList。它會拋出一個錯誤:

'System.Collections.Generic.IList' does not contain a definition for 'Length' and no extension method 'Length' accepting a first argument of type 'System.Collections.Generic.IList' could be found (are you missing a using directive or an assembly reference?)

這讓我想,why does List<T> not have a Length property?我知道你可以使用Count()來代替,但Length的時間複雜度爲O(1)。

+17

因爲它有一個Count屬性... –

+1

如果IList實際上是一個列表,則Count是O(1)。 –

+0

@AndrewWhitaker:根據問題'NumberList'是一個'IList'不是'List',所以雖然它可能實際上是一個List,實際上是O(1)(每個文檔),但它不一定是案件。 –

回答

3

根據我的經驗,在.NET中的傳統似乎是數組和字符串有Length,而更高級別的可數集合具有Count屬性。 IList<T>有一個Count屬性,一般來說應該是 O(1),但取決於具體的實現。例如最常用的List<T>確實在O(1)處。

通用Count()方法爲任何IEnumerable<T>類型的延伸部,並且具有在技術上爲O(n)的複雜性確實,因爲項目的數目可以不列舉的每一個元素,或給予次數之前是已知的,需要一些自定義處理(例如,由接口IQueryable<T>表示的Linq to SQL查詢結果)。

+0

您能否提供支持您的語句的源代碼?* .NET中的約定是數組和字符串具有長度,而更高級別的可數集合具有Count屬性*「? –

+0

好的,謝謝,我認爲這可能是最明智的。雖然我不一定不同意,但我還沒有就該主題提出任何建議或討論,以保證它被視爲一項公約。 –

相關問題