我有一个包含1个属性的集合类 - 一个子类的数组。
为了这个问题。我有一个篮子课,然后是水果[]作为篮子的一个属性。例如,fruit类包含3个属性。名称,颜色和大小。
如何使篮子类运行以便我可以在其上使用foreach循环?
答案 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)