C# 中List中的Count和Count(),有什麼區別

ProZkb發表於2024-07-30

在 C# 中,List<T> 類有一個屬性 Count 和一個擴充套件方法 Count(),它們雖然在名稱上相似,但有明顯的區別。

List<T>.Count 屬性

  • 定義CountList<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

在這個例子中,countPropertycountMethod 的值是一樣的,但 Count 屬性更為簡潔。

相關文章