從IEnumerable
考慮一個場景,您有一個IEnumerable
private IEnumerable<string> Tables { get { yield return "Foo"; yield return "Bar"; } }
您想要迭代此集合並將進度顯示為「處理#n of #m」。有沒有一種方法可以在主迭代之前確定 m 的值?
瞭解 IEnumerable
預設情況下,IEnumerable 不允許直接擷取項目計數。其惰性求值本質意味著僅根據需要檢索元素。這種設計選擇是為了透過避免不必要的記憶體分配和處理來優化資源使用。
替代方案:使用 ICollection
如果您需要立即了解項目計數, IEnumerable 的替代方案是使用 ICollection
public class TableCollection : ICollection<string> { // Implementation details omitted for brevity public int Count => 2; }
透過將 Tables 集合強制轉換為 ICollection
結論
雖然 IEnumerable 提供惰性評估的好處是,它不直接支持項目計數檢索。若要立即存取計數,請考慮使用 ICollection 或更合適的提供此功能的資料結構。
以上是如何在不迭代的情況下取得 IEnumerable 中的項目計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!