gpt4 book ai didi

c# - 调用使用 yield 返回的方法时出现错误 'Iterator cannot contain return statement '

转载 作者:可可西里 更新时间:2023-11-01 08:06:11 35 4
gpt4 key购买 nike

我希望有更好的方法来编写此方法和重载,同时减少代码重复。我想返回列表中项目之间的一系列增量。这个方法:-

    public static IEnumerable<decimal> CalculateDeltas(this IEnumerable<decimal> sequence)
{
decimal prev = default(decimal);
foreach (var item in sequence)
{
var current = item;
decimal diff = current - prev;
prev = item;
yield return diff;
}
}

工作得很好。

然后我想到了一个允许绝对增量的重载,但如果不需要绝对值,则会调用原始方法:-

    public static IEnumerable<decimal> CalculateDeltas(this IEnumerable<decimal> sequence,bool absolute)
{
if (absolute)
{
decimal prev = default(decimal);
foreach (var item in sequence)
{
var current = item;
decimal diff = Math.Abs(current - prev);
prev = item;
yield return diff;
}
}
else
{
return CalculateDeltas(sequence);
}
}

但是由于错误,这不能编译

"Cannot return a value from an iterator. Use the yield return statement to return a value, or yield break to end the iteration."

我看过this post似乎除了重复原始方法中的代码之外我将无法做任何事情:-

    public static IEnumerable<decimal> CalculateDeltas(this IEnumerable<decimal> sequence,bool absolute)
{
if (absolute)
{
decimal prev = default(decimal);
foreach (var item in sequence)
{
var current = item;
decimal diff = Math.Abs(current - prev);
prev = item;
yield return diff;
}
}
else
{
decimal prev = default(decimal);
foreach (var item in sequence)
{
var current = item;
decimal diff = current - prev;
prev = item;
yield return diff;
}
}
}

谁能提出更好的方法?

最佳答案

单个方法不能同时yield returnreturn。您必须选择其中之一。

您可以执行 foreachyield return 列表:

else
{
foreach (var item in CalculateDeltas(sequence))
yield return item;
}

或者将您的代码分成两个方法:

if (absolute)
return CalculateAbsoluteDeltas(sequence);
else
return CalculateDeltas(sequence);

关于c# - 调用使用 yield 返回的方法时出现错误 'Iterator cannot contain return statement ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23391119/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com