dot net是否有像IEnumerable这样的接口和count属性?我知道IList和ICollection之类的接口确实提供了Count属性,但似乎这些接口首先是为可变数据结构而设计的,并且用作只读接口似乎是事后的想法 - 存在IsReadOnly字段和mutators抛出异常当这个属性为真时,IMO有足够的证据证明这一点.
目前我正在使用一个名为IReadOnlyCollection的自定义界面(请参阅我自己对这篇文章的回答),但我很高兴知道其他替代方法.
ICollection系列和IEnumerable系列之间的主要区别在于,对于存在的项目数量缺乏确定性(通常根据需要生成/加载/补充项目) - 在某些情况下,Enumerable可能无法完成生成结果,这就是Count失踪的原因.
根据你的要求,可以得出和添加一个Count,但这违背了这种精神,这就是ICollection的目的 - 一系列的东西都在那里.
另一种方法可能是使用System.Linq.Enumerable.Count方法,即
using System.Linq; class X { void Y(IEnumerablecollection) { int itemCount = collection.Count(); } }
或者使用(System.Linq.Enumerable).ToList()将枚举器中的所有项目拉入Collection并从那里开始工作.
(也是在50个代表之前回答你的评论: - ".count()"位是对扩展类System.Linq.Enumerable的扩展方法的调用 - 扩展方法适用于从IEnumerable派生的所有东西,因为代码有一个"using System.Linq",它将该命名空间中所有类的扩展方法带入范围 - 在本例中它在类Enumerable中.如果你在VS中,按F12将带你进入SLEnumerable的定义BTW C#In Depth是一本非常出色的学习LINQ的书 - 它的页面翻转器真的可以帮助你全面了解LINQ一块一块地学习
从.Net 4.5开始,有两个新的接口:IReadOnlyCollection
和IReadOnlyList
.
IReadOnlyCollection
是添加IEnumerable
了Count
属性,IReadOnlyList
还添加了索引.