【发布时间】:2014-06-16 22:51:55
【问题描述】:
我希望有一种更好的方法来编写此方法和重载,同时减少代码重复。我想返回列表中项目之间的一系列增量。这个方法:-
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);
}
}
但由于错误而无法编译
"不能从迭代器返回值。使用yield return 语句返回一个值,或 yield break 结束迭代。”
我看过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;
}
}
}
任何人都可以提出更好的方法吗?
【问题讨论】:
标签: c# refactoring extension-methods ienumerable yield