使用IEnumerator的我有一個集合類,其中包含1個屬性 - 子類的陣列。C#,如何在
對於這個問題的緣故。我有一個籃子課,然後水果[]作爲籃子的一個屬性。例如,水果類包含3個屬性。名稱,顏色和大小。
我怎樣才能讓籃筐類的表現,使我可以在其上使用foreach循環?
使用IEnumerator的我有一個集合類,其中包含1個屬性 - 子類的陣列。C#,如何在
對於這個問題的緣故。我有一個籃子課,然後水果[]作爲籃子的一個屬性。例如,水果類包含3個屬性。名稱,顏色和大小。
我怎樣才能讓籃筐類的表現,使我可以在其上使用foreach循環?
在這個簡單的例子,你可以委託枚舉到數組,像這樣:
public class Basket: IEnumerable {
private Fruit[] fruits;
public IEnumerator getEnumerator() {
return fruits.GetEnumerator();
}
}
從你已經得到了已經,你能夠做到這一點:
foreach(fruit f in myBasket.fruits) { ... }
這樣不夠好嗎?如果你想使用foreach(fruit f in myBasket)
,你可以實現IEnumerable
,並在getEnumerator
方法只是泡沫調用fruits.getEnumerator
,但說真的,我覺得在這種情況下,我寧願有籃子繼承水果的清單:
public class Basket : List<Fruit>() { ... }
然後你根本不會使用私人會員fruits
。
雖然它可能更希望從List<Fruit>
這裏得到的東西,讓你開始,如果由於某種原因,不能滿足您的要求: -
public class Basket : IEnumerable<Fruit>
{
private Fruit[] myFruit;
public int Count { get; private set; }
public IEnumerator<Fruit> GetEnumerator()
{
for (int i = 0; i < Count; i++)
yield return myFruit[i];
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
我會建議使用通用的IEnumerator,雖然數組必須被轉換爲一個IEnumerable 這樣做 –
thecoop
2009-11-26 13:57:38
是的,我想過做的一般之一。但是,那麼你需要兩個'GetEnumerator'實現(非通用一個爲顯式接口實現,一般一個一個隱含的),因爲它會增加一些噪音,這可能是有些混亂。但是你是對的,現在應該在生產代碼中實現通用接口。 – Lucero 2009-11-27 12:21:23