我嘗試替換foreach (var i in Enumerable.Range(0, _gridCount))為,foreach (var i in 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() { }
}
}
uj5u.com熱心網友回復:
該錯誤顯示“因為‘RangeEnumerator’是一個‘ref’結構”,所以洗掉ref關鍵字應該可以修復它。
public struct RangeEnumerator
{
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535011.html
標籤:C#。网范围
