C#,如何在用户定义的类中使用IEnumerator

时间:2009-11-26 13:53:21

标签: c#

我有一个包含1个属性的集合类 - 一个子类的数组。

为了这个问题。我有一个篮子课,然后是水果[]作为篮子的一个属性。例如,fruit类包含3个属性。名称,颜色和大小。

如何使篮子类运行以便我可以在其上使用foreach循环?

4 个答案:

答案 0 :(得分:4)

从你已经拥有的,你能够做到这一点:

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

那还不够好吗?如果您想使用foreach(fruit f in myBasket),则可以实施IEnumerable,并在您的getEnumerator方法中将呼叫冒充fruits.getEnumerator,但实际上,我认为在这种情况下我会而是让篮子继承一份水果清单:

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

然后你根本不会使用私人成员fruits

答案 1 :(得分:3)

在这个简单的例子中,您可以将枚举委托给数组,如下所示:

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

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

答案 2 :(得分: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();
     }
}

答案 3 :(得分:1)