除了(IEnumerable的返回的GetEnumerator(),为 “的foreach” IEnumerble是必不可少的)C#Itreator最好的办法
几乎以下两种方法允许我们遍历collection.What是
的优势一个在另一个? (我不问IEnumerable 和IEnumerator之间的区别)。
static void Main()
{
IEnumerator<int> em = MyEnumerator<int>(new int[] { 1, 2, 3, 4 });
IEnumerator<int> e = Collection<int>
(new int[] { 1, 2, 3, 4 }).GetEnumerator();
while (em.MoveNext())
{
Console.WriteLine(em.Current);
}
while (e.MoveNext())
{
Console.WriteLine(e.Current);
}
Console.ReadKey(true);
}
方法1
public static IEnumerator<T> MyEnumerator<T>(T[] vals)
{
T[] some = vals;
foreach (var v in some)
{
yield return v;
}
}
方法2
public static IEnumerable<T> Collection<T>(T[] vals)
{
T[] some = vals;
foreach (var v in some)
{
yield return v;
}
}
超级duper解释谢谢 – udana 2009-10-23 13:15:02
永远不要打电话重置。重置是一个糟糕的主意,几乎总是没有实现。如果您需要重新启动枚举,只需创建一个新的枚举器。 – 2009-10-23 16:28:06
好的,所以这是反对传递IEnumerator实例的一个重点,没有重置它们是绝对不可行的。 – 2009-10-23 19:40:07