2301_77819834 2023-10-18 15:00 采纳率: 33.3%
浏览 14

c#使用接口IEnumerable和IEnumerator实现

设计一个水果篮子(FruitBasket),里面至多可装N个水果,水果种类≧2,且均派生自同一基类。使用接口IEnumerable和IEnumerator实现装入水果及遍历水果的过程

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-19 17:47
    关注

    【以下回答由 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类的具体解决方案。希望对你有所帮助!如果你还有其他问题,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月18日

悬赏问题

  • ¥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 微信的店铺小程序如何修改背景图