我想实现一个通用的IEnumerator<T>扩展方法,它返回IEnumerable中的下一个元素,如下所示:
var list = new List<MyClass>();
var enumerator = list.GetEnumerator();
var nextItem1 = enumerator.GetNext();
var nextItem2 = enumerator.GetNext();
// Instead of calling enumerator.MoveNext() and then reading the current item.我试过这样做,但它不会编译:
public static T GetNext(this IEnumerator<T> list)
{
list.MoveNext();
return list.Current;
}我哪里出错了?谢谢。
发布于 2014-03-13 10:52:40
您似乎缺少了方法签名上的泛型类型定义:
public static T GetNext<T>(this IEnumerator<T> list)
{
// ---- this bit---^^^
}如果没有具有相同名称的类级泛型类型,则需要存在该类型。否则就没问题了。
然而..。
我个人不会这样做,因为你没有听MoveNext的结果。除非您能够对期望值作出假设,否则您无法判断迭代器是否到达集合的末尾。对于大多数常见的用途,这将不是一个可行的方法。
实际上,我走了另一条路线,实现了一个AsEnumerable扩展方法,该方法只需手动迭代,但从外部允许您执行类似foreach (var item in iterator.AsEnumerable())之类的操作,并且不会忽略MoveNext结果:
public static IEnumerable<TSource> AsEnumerable<TSource>(this IEnumerator<TSource> iterator)
{
while (iterator.MoveNext())
{
yield return iterator.Current;
}
}https://stackoverflow.com/questions/22376275
复制相似问题