使用 IEnumerable 時,基本原則是惰性求值,即僅在需要時才檢索元素。然而,有時我們可能會發現自己處於這樣一種情況:我們需要知道集合中項目的數量而不需要迭代它們。
考慮以下程式碼片段:
private IEnumerable<string> Tables { get { yield return "Foo"; yield return "Bar"; } }
如果我們想要迭代這個集合並將進度顯示為“處理#n of #m”,我們如何確定m 的值而不需要迭代?
IEnumerable 的限制
不幸的是,這對 IEnumerable 是不可能的。根據設計,它是惰性運行的,僅在請求時產生元素。預先決定總計數需要預先遍歷,因而違背了惰性求值的目的。
ICollection 來救援
如果在不迭代的情況下知道計數至關重要,請考慮使用 ICollection 代替。 ICollection 是一個接口,表示可以提供有關其內容的資訊的集合。它包含一個 Count 屬性,用於傳回集合中的元素數量。
private ICollection<string> Tables { get { return new List<string> { "Foo", "Bar" }; } } int count = Tables.Count;
透過將 Tables 轉換為 List
總之,雖然 IEnumerable 因其在惰性計算方面的效率而引人注目,但它預先缺乏計數資訊可能是一個限制。對於必須事先知道計數的情況,請考慮使用 ICollection。
以上是如何在不迭代的情況下取得 IEnumerable 的計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!