更漂亮的foreach - Range扩展不能对枚举数或异步操作



我试着用foreach (var i in 0.._gridCount)代替foreach (var i in Enumerable.Range(0, _gridCount)),因为它看起来更漂亮,而且性能也很好。

当我尝试这样做时,foreach显示以下错误:

'foreach'语句不能对'async'或迭代器方法中的'RangeEnumerator'类型的枚举数进行操作,因为'RangeEnumerator'是一个'ref'结构

我该如何修复它?

public IEnumerable<double> GridLevels()
{
var step = (_upperLimit - _lowerLimit) / _gridCount;
foreach (var i in Enumerable.Range(0, _gridCount))
{
var price = _lowerLimit + step * i;
yield return price;
}
}
public static class RangeExtensions
{
public static RangeEnumerator GetEnumerator(this Range range) => new(range);
public ref struct RangeEnumerator
{
private readonly int _start;
private readonly int _length;
private int _count;
public RangeEnumerator(Range range)
{
var (offset, length) = range.GetOffsetAndLength(int.MaxValue);
(Current, _start, _length, _count) = (offset - 1, offset - 1, length, 0);
}
public bool MoveNext()
{
(var result, _count, Current) = (_count < _length, _count + 1, Current + 1);
return result;
}
public void Reset() => (Current, _count) = (_start, 0);
public int Current { get; private set; }
public void Dispose() { }
}
}

错误显示"因为'RangeEnumerator'是一个'ref'结构">,所以删除ref关键字应该修复它。

public struct RangeEnumerator
{
}

最新更新