设计一个水果篮子(FruitBasket),里面至多可装N个水果,水果种类≧2,且均派生自同一基类。使用接口IEnumerable和IEnumerator实现装入水果及遍历水果的过程
3条回答 默认 最新
关注 【以下回答由 GPT 生成】
最佳实践是使用List作为FruitBasket类的内部数据结构来存储水果,然后通过实现接口IEnumerable和IEnumerator来进行遍历。下面是具体的解决方案:
首先,创建一个名为Fruit的基类,定义水果的通用属性和方法。例如:
public class Fruit { public string Name { get; set; } public int Quantity { get; set; } public void Eat() { Quantity--; } }
接下来,创建一个名为FruitBasket的类,实现接口IEnumerable和IEnumerator。在FruitBasket类中,使用List来存储水果对象,并在实现GetEnumerator方法时返回一个自定义的迭代器类。迭代器类需要实现接口IEnumerator,并在实现MoveNext方法时遍历List中的水果。
public class FruitBasket : IEnumerable<Fruit> { private List<Fruit> fruits; public FruitBasket(int maxSize) { fruits = new List<Fruit>(maxSize); } public void AddFruit(Fruit fruit) { if (fruits.Count >= fruits.Capacity) { throw new InvalidOperationException("Fruit basket is full"); } fruits.Add(fruit); } public IEnumerator<Fruit> GetEnumerator() { return new FruitBasketIterator(fruits); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } private class FruitBasketIterator : IEnumerator<Fruit> { private List<Fruit> fruits; private int currentIndex = -1; public FruitBasketIterator(List<Fruit> fruits) { this.fruits = fruits; } public Fruit Current => fruits[currentIndex]; object IEnumerator.Current => Current; public bool MoveNext() { currentIndex++; return currentIndex < fruits.Count; } public void Reset() { currentIndex = -1; } public void Dispose() { // 清空资源 } } }
现在,你可以使用以下代码测试FruitBasket类的功能:
FruitBasket basket = new FruitBasket(5); basket.AddFruit(new Fruit() { Name = "Apple", Quantity = 3 }); basket.AddFruit(new Fruit() { Name = "Banana", Quantity = 2 }); foreach (Fruit fruit in basket) { Console.WriteLine(fruit.Name); } // 输出: // Apple // Banana
以上就是使用接口IEnumerable和IEnumerator实现FruitBasket类的具体解决方案。希望对你有所帮助!如果你还有其他问题,请随时提问。
【相关推荐】
- 这篇博客: C#学习笔记(七)—–集合--IEnumerable和IEnumerator接口中的 IEnumerator和IEnumerable 部分也许能够解决你的问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
- ¥15 matlab自定义损失函数
- ¥15 35114 SVAC视频验签的问题
- ¥15 impedancepy
- ¥15 求往届大挑得奖作品(ppt…)
- ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
- ¥50 浦育平台scratch图形化编程
- ¥20 求这个的原理图 只要原理图
- ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
- ¥20 微信的店铺小程序如何修改背景图