【发布时间】:2021-09-21 17:40:52
【问题描述】:
我们正在类中实现 IEnumerator 和 IEnumerable
static void Main(string[] args)
{
ParsingFile data = new ParsingFile();
foreach (var line in data) // Calls the current, the implicit type of line is object but we want is as a DataRow
{
//call MoveNext
}
}
public class ParsingFile : IEnumerator , IEnumerable
{
object IEnumerator.Current //need the object to be of type DataRow to avoid casting in foreach
{
//return a DataRow
}
public IEnumerator GetEnumerator()
{
return this;
}
public bool MoveNext()
{
//Do something
}
}
current 的返回类型是 object 但要显式返回 DataRow。请让我们知道实现这一目标的方法是什么?
【问题讨论】:
-
您需要实现
IEnumerable<T>而不仅仅是IEnumerable。你自己实施它有什么原因吗?这很少需要(或一个好主意)。 -
另外,不要从
GetEnumerator()盲目地return this:每次消费者调用它时,您都需要返回一个新的枚举器,该枚举器将从序列的开头开始枚举。可以在此处优化并仅在 first 调用GetEnumerator()时返回this,并在后续调用中返回一个新实例(Linq 会这样做),但首先要有单独的Enumerator和Enumerable类
标签: c# .net ienumerable datarow ienumerator