实现IEnumerable,但避免'MyClass'没有实现IEnumerable.GetEnumera

本文关键字:实现 IEnumerable GetEnumera MyClass | 更新日期: 2023-09-27 18:12:05

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

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

我理解这个错误。我只是想知道是否有一种方法,而不是实际实现GetEnumerator在MyClass。

实现IEnumerable,但避免'MyClass'没有实现IEnumerable.GetEnumera

如果您想避免手动实现IEnumerable,该语言支持一些语法糖,可以自动为您生成大部分IEnumerable。它不是在你的类上实现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
}

(注意,如果在类中有浮点数的文字可枚举对象,这是一个微不足道的问题,您可以简单地将其作为IEnumerable返回。)