实现IEnumerable,但避免'MyClass'不实现接口成员'IEnumerable.GetEnumerator()'

Implement IEnumerable, but avoid 'MyClass' does not implement interface member 'IEnumerable.GetEnumerator()'

我有一个自定义 class,它的核心是一个浮点数列表。在应用程序的其他地方,我想用 ForEach 遍历它,所以在 class 定义上,我试图只实现 IEnumerable。但是当我这样做时,我被告知:

'MyClass' does not implement interface member 'IEnumerable.GetEnumerator()'

我理解错误。我只是想知道是否有解决方法,除了在 MyClass 中实际实现 GetEnumerator。

如果您想避免手动实现 IEnumerable,该语言支持一些语法糖,可以自动为您生成大部分语法糖。它没有在你的 class 上实现 IEnumerable<>(如果你想要它,你必须实现它,就像其他人所说的那样),但它很接近。

public class MyClass
{
    private bool TryGetNextFloat(out float nextFloat) {/* Whatever */};
    public IEnumerable<float> AsEnumerable()
    { 
        float nextFloat = 0;
        while(this.TryGetNextFloat(out nextFloat))
        {
            yield nextFloat;
        }
    }
}

// Elsewhere
foreach (var f in myClassInstance.AsEnumerable())
{
    // Do something with f
}

(请注意,如果您的 class 中有可枚举的浮点数,这是一个微不足道的问题,您可以简单地 return 将其作为 IEnumerable。)