[英]Is an infinite enumerable still “enumerable”?
像两个重叠的线段一样,我们可以找到无限的交点。 枚举所有这些点可能没有意义,我们可能只想提出这个集合是无限的。
浮点数已定义NegativeInfinity
和PositiveInfinity
。 表示计数或序数的数字似乎不需要使用浮点数,但是,没有定义整数来表示无穷大。
因此,我尝试实现一个无限的枚举。 但是我突然对“可枚举”一词感到困惑。
有解决这个问题的更好方法吗? 无限枚举是否仍然可以枚举 ?
码
public partial class Infinity: IEnumerable<object> { IEnumerator<object> IEnumerable<object>.GetEnumerator() { for(; ; ) yield return Infinity.Enumerable; } public IEnumerator GetEnumerator() { for(; ; ) yield return Infinity.Enumerable; } public Infinity LongCount( Func<object, bool> predicate=default(Func<object, bool>)) { return Infinity.Enumerable; } public Infinity Count( Func<object, bool> predicate=default(Func<object, bool>)) { return Infinity.Enumerable; } public static readonly Infinity Enumerable=new Infinity(); }
编辑:
谢谢回答。 我对IEnumerable
和IEnumerator
不感到困惑。 GetEnumerator
方法返回Infinity.Enumerable
是因为我不想宣布额外的虚拟对象,如:
static readonly object dummy=new object();
并在GetEnumerator
方法中产生yield return dummy
。
正自然数是无限的,并且显然可以枚举(1、2、3,……)。 即使在C#之外,该概念也是定义明确的。
但是,您的类遇到了问题,因为您将IEnumerable
和IEnumerator
接口混淆了。 GetEnumerator
方法仅返回一个枚举数。 那是无限的。
在C#中轻松实现无限IEnumerable
(作为方法而不是类)如下所示:
IEnumerable<int> Infinite() {
int i = 1;
while (true)
yield return i++;
}
注意: int
在某些时候溢出。 但是,默认情况下,C#随后将简单地循环回到负数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.