必须将.NET的IList设为有限吗?假设我编写了一个实现IList<BigInteger>
的类FibonacciList
- 属性Item[n]返回第n个斐波那契数。
- 属性IsReadOnly返回true。
- 我们可以轻松地实现IndexOf和Contains方法,因为斐波那契序列是递增的-要测试数字m是否为斐波那契数,我们只需要计算斐波那契数列直到m(有限)。
- 方法GetEnumerator()做正确的事情
现在,除了Count()之外,我们已经实现了只读ILists预期的所有方法。
这很酷,还是滥用了IList?
斐波那契数列很快变得不切实际大(因此上面使用了
IList<BigInteger>
) 。一个有界的无限序列可能更明智,它可以实现 IList<long>
或 IList<double>
。补充二:斐波那契数列可能是一个糟糕的例子,因为计算远距离的值是昂贵的 - 要找到第n个值,必须计算所有较早的值。因此,正如Mošmondor所说,人们可能会将其作为IEnumerable并使用
.ElementAt
。然而,存在其他序列,可以快速计算远距离的值而不计算先前的值。 (令人惊讶的是,pi的数字就是这样的序列)。这些序列更具“列表”性,它们真正支持随机访问。编辑:没有人反对无限的IEnumerables。它们如何处理Count()?
Count()
,所以这看起来确实是对IList<T>
的滥用。毕竟,你不能部分地实现一个接口。 - Frédéric Hamidiint.MaxValue
。索引也受 int 大小的限制,而且枚举在现实时间范围内也无法到达那里。 - CodesInChaos