在C#中,MS提供了foreach关键字,与for相比在遍历集合元素的性能上得到了极大的提高。
foreach语句的执行原理
foreach
(car s
in
cars)
... {
Console.WriteLine("car's value: {0}", s);
}
IEnumerator ienum = (IEnumerator)lbt.GetEnumerator();
ienum.Reset();
while (ienum.MoveNext()) ... {
Car s = (Car)ienum.Current;
Console.WriteLine("car's value: {0}", s);
}
... {
Console.WriteLine("car's value: {0}", s);
}
IEnumerator ienum = (IEnumerator)lbt.GetEnumerator();
ienum.Reset();
while (ienum.MoveNext()) ... {
Car s = (Car)ienum.Current;
Console.WriteLine("car's value: {0}", s);
}
由上面可知,一个类型要想支持foreach则必须实现IEnumerable,IEnumerator两个接口。
//
Namespace: System.Collections, Library: BCL
public interface IEnumerable ... {
IEnumerator GetEnumerator();
}
// Namespace: System.Collections, Library: BCL
public interface IEnumerator ... {
bool MoveNext();
void Reset();
object Current ...{ get; }
}
public interface IEnumerable ... {
IEnumerator GetEnumerator();
}
// Namespace: System.Collections, Library: BCL
public interface IEnumerator ... {
bool MoveNext();
void Reset();
object Current ...{ get; }
}
那么我们现在可以让自己定义的类型来支持foreach:
using
System;
using System.Collections;
namespace ConsoleEnum
using System.Collections;
namespace ConsoleEnum