2009-11-26 49 views
1
用戶定義的類

使用IEnumerator的我有一個集合類,其中包含1個屬性 - 子類的陣列。C#,如何在

對於這個問題的緣故。我有一個籃子課,然後水果[]作爲籃子的一個屬性。例如,水果類包含3個屬性。名稱,顏色和大小。

我怎樣才能讓籃筐類的表現,使我可以在其上使用foreach循環?

回答

3

在這個簡單的例子,你可以委託枚舉到數組,像這樣:

public class Basket: IEnumerable { 
    private Fruit[] fruits; 

    public IEnumerator getEnumerator() { 
    return fruits.GetEnumerator(); 
    } 
} 
+3

我會建議使用通用的IEnumerator ,雖然數組必須被轉換爲一個IEnumerable 這樣做 – thecoop 2009-11-26 13:57:38

+0

是的,我想過做的一般之一。但是,那麼你需要兩個'GetEnumerator'實現(非通用一個爲顯式接口實現,一般一個一個隱含的),因爲它會增加一些噪音,這可能是有些混亂。但是你是對的,現在應該在生產代碼中實現通用接口。 – Lucero 2009-11-27 12:21:23

4

從你已經得到了已經,你能夠做到這一點:

foreach(fruit f in myBasket.fruits) { ... } 

這樣不夠好嗎?如果你想使用foreach(fruit f in myBasket),你可以實現IEnumerable,並在getEnumerator方法只是泡沫調用fruits.getEnumerator,但說真的,我覺得在這種情況下,我寧願有籃子繼承水果的清單:

public class Basket : List<Fruit>() { ... } 

然後你根本不會使用私人會員fruits

3

雖然它可能更希望從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(); 
    } 
}