Я могу что-то упустить здесь, но в чем причина прямого доступа к IEnumerable<T>.GetEnumerator()
, IEnumerator<T>.MoveNext()
и IEnumerator<T>.Current
?Похоже, вы напрямую копируете, что делает цикл foreach
.
public static T Next<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
bool shouldReturn = false;
foreach (var item in source)
{
if(shouldReturn)
return item;
if (predicate(item))
shouldReturn = true;
}
return default(T);
}
public static T Previous<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
var previous = default(T);
foreach (var item in source)
{
if (predicate(item))
return previous;
previous = item;
}
return default(T);
}