实现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,该语言支持一些语法糖,可以自动为您生成大部分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返回。)