1
我得到了這個很好的方法,我在很多情況下使用。我的擴展方法是否有內置的.NET Framework替代品?
internal static IEnumerable<TResult> RoundTrip<TSource, TResult>
(this IEnumerable<TSource> e, Func<TSource, TSource, TResult> currentNextAction)
{
using (IEnumerator<TSource> enumer = e.GetEnumerator())
{
if (!enumer.MoveNext())
yield break;
bool flag = true;
TSource first = enumer.Current;
do
{
TSource current = enumer.Current;
TSource next = (flag = enumer.MoveNext()) ? enumer.Current : first;
yield return currentNextAction(current, next);
} while (flag);
}
}
我已經看過MSDN一些內置的替代品,但無法找到他們。有沒有?
而且,有什麼我可以改進的代碼?
編輯:非enumeratorable法新代碼。
internal static IEnumerable<TResult> RoundTrip<TSource, TResult>
(this IEnumerable<TSource> e, Func<TSource, TSource, TResult> currentNextAction)
{
bool flag = false;
TSource first = default(TSource);
TSource previous = default(TSource);
foreach (TSource item in e)
{
if (!flag)
{
flag = true;
first = previous = item;
continue;
}
yield return currentNextAction(item, previous);
previous = item;
}
if (flag)
yield return currentNextAction(previous, first);
else
yield break;
}
(我喜歡的方式,第一個)
您可能想解釋它做了什麼。 'RoundTrip()'不是最具描述性的名字... – BoltClock
你有沒有具體的問題?否則,你可能想問一下['codereview.stackexchange.com'](http://codereview.stackexchange.com/)。 –
是代碼的預期行爲,因爲它代表將迭代ienumeraqble並進一步返回第一個元素作爲第一個元素和最後一個元素,然後停止。然而從名字上來看,它聽起來有點像一個「環形緩衝區」,你希望在達到結尾後再次開始枚舉...... –