我們寫一些實體類的時候,總希望它們可以進行foreach遍曆,但是預設的是不能進行foreach遍曆。
假如我有一個汽車類和一個汽車工廠類見下面代碼:
public class Car
{
private string _name;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
public Car(string name)
{
_name = name;
}
}
public class CarFactory
{
private Car[] carArry;
public CarFactory()
{
carArry = new Car[2];
carArry[0] = new Car("carA");
carArry[1] = new Car("carB");
}
}
然後在用戶端進行使用
static void Main(string[] args)
{
CarFactory carFactory = new CarFactory();
foreach (Car c in carFactory)
{
Console.WriteLine(c.Name);
}
}
現在你會發現編譯器通不過,會提示一個這樣的錯誤:
“錯誤 1 “ConsoleApplication1.CarFactory”不包含“GetEnumerator”的公用定義,因此 foreach 語句不能作用於“ConsoleApplication1.CarFactory”類型的變數 D:\VS2008\Test\ConsoleApplication1\ConsoleApplication1\Program.cs 14 13 ConsoleApplication1”
它提示說我們的類中沒有實現GetEnumerator方法。
這時我們只需要把我們的CarFactory類實現IEnumerable介面就可以了,見下面代碼:
public class CarFactory:IEnumerable
{
private Car[] carArry;
public CarFactory()
{
carArry = new Car[2];
carArry[0] = new Car("carA");
carArry[1] = new Car("carB");
}
#region IEnumerable 成員
public IEnumerator GetEnumerator()
{
return carArry.GetEnumerator();
}
#endregion
}
參考書:《C#與.Net3.0進階程式設計》