无数可数仍然是“可枚举的”?

时间:2013-05-22 23:34:40

标签: c# ienumerable terminology semantics

像两个重叠的线段一样,我们可以找到无限的交点。列举所有这些点可能没有意义,我们可能只想表明这个集合是无限的。

浮点数已定义NegativeInfinityPositiveInfinity。表示 count 序数的数字似乎不需要使用浮点数,但是,整数未定义为表示无穷大的东西。

所以我试图实现无限的可枚举。但我突然对“可枚举”一词感到困惑。

有没有更好的方法来解决这个问题?并且是一个无限可枚举的可枚举的

  • 代码

    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();
    }
    

修改:

感谢您的回答。我 IEnumerableIEnumerator混淆。 GetEnumerator方法返回Infinity.Enumerable是因为我想要声明一个额外的虚拟对象,例如:

static readonly object dummy=new object();

并在dummy方法中返回GetEnumerator

2 个答案:

答案 0 :(得分:6)

  

是无数的可枚举仍然可以枚举?

在这个意义上,可以使用第二个definition of enumerate

  

一个接一个地指定

它并不是指(更常见的计算外)定义,它实际上意味着“能够被计算”。

从这个意义上说,无限系列绝对可以一个接一个地列出,并且可以作为可枚举。

话虽如此,我在这个例子中没有看到你的代码背后的目的。无限可枚举通常表示类似于没有结束的数据流,或者没有“结束”的其他来源,但是有可能不断地提取信息。

答案 1 :(得分:5)

正的自然数是无限的,并且可以清楚地枚举(1,2,3,...)。即使在C#之外,这个概念也是明确定义的。

您的课程有问题,因为您混淆了IEnumerableIEnumerator界面。 GetEnumerator方法仅返回一个枚举器。 是无限的。

在C#中轻松实现无限IEnumerable(作为方法而不是类)如下所示:

IEnumerable<int> Infinite() {
    int i = 1;
    while (true)
        yield return i++;
}

警告:int在某些时候溢出。但是,默认情况下,C#将简单地循环回负数。