在 C# 中,List<T>
類有一個屬性 Count
和一個擴充套件方法 Count()
,它們雖然在名稱上相似,但有明顯的區別。
List<T>.Count
屬性
- 定義:
Count
是List<T>
類的一個屬性。 - 功能:返回列表中包含的元素的數量。
- 實現:它是一個只讀屬性,其值是由列表內部維護的一個欄位直接返回的。
- 效能:由於它直接訪問內部欄位,所以效能非常高,是 O(1) 時間複雜度。
- 推薦使用:對於
List<T>
,直接使用Count
屬性。
Count()
擴充套件方法
- 定義:
Count()
是 LINQ 提供的一個擴充套件方法,適用於實現了IEnumerable<T>
介面的所有集合。 - 功能:計算集合中包含的元素的數量。
- 實現:對於實現了
ICollection<T>
介面的集合,Count()
呼叫的是ICollection<T>.Count
屬性;對於其他IEnumerable<T>
,Count()
會透過迭代整個集合來計算元素數量。 - 效能:對於實現了
ICollection<T>
介面的集合(如List<T>
),Count()
的效能與Count
屬性相同,是 O(1) 時間複雜度。對於其他集合,Count()
需要遍歷集合,時間複雜度為 O(n)。 - 使用場景:適用於所有實現了
IEnumerable<T>
介面的集合,但對於List<T>
,直接使用Count
屬性更為簡潔和高效。
總結
對於 List<T>
:
Count
屬性更高效,因為它直接返回儲存的元素數量。Count()
擴充套件方法雖然在某些情況下(例如,ICollection<T>
)也有相同的效能,但語法上略顯繁瑣。
因此,對於 List<T>
,更推薦使用 Count
屬性。
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; // 使用 Count 屬性 int countProperty = numbers.Count; // 使用 Count() 擴充套件方法 int countMethod = numbers.Count(); Console.WriteLine(countProperty); // 輸出: 5 Console.WriteLine(countMethod); // 輸出: 5
在這個例子中,countProperty
和 countMethod
的值是一樣的,但 Count
屬性更為簡潔。