从 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中文网其他相关文章!