4

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

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

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

有没有更好的方法来解决这个问题?无限可枚举仍然可枚举吗?

  • 代码

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

编辑:

谢谢回答。我并不混淆IEnumerableand IEnumeratorGetEnumerator方法返回Infinity.Enumerable是因为我不想声明一个额外的虚拟对象,例如:

static readonly object dummy=new object();

dummy并在GetEnumerator方法中产生回报。

4

2 回答 2

6

无限可枚举仍然可枚举吗?

从这个意义上说,Enumerable 是基于enumerate 的第二个定义

一个接一个地指定

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

从这个意义上说,无限级数绝对可以一个接一个地列出来,并且有资格作为一个可枚举的。

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

于 2013-05-22T23:36:46.087 回答
5

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

但是,您的课程有问题,因为您混淆了IEnumerableandIEnumerator接口。该GetEnumerator方法只返回一个枚举数。是无限的。

C#中无限的简单实现IEnumerable(作为方法而不是类)如下所示:

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

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

于 2013-05-22T23:37:26.120 回答