使用类管理另一个类对象集合

1.关于实现IEnumrable接口的类
在类进行初始化时候,可以调用实现的Add方法

 class Demo :IEnumerable{
        public int a;

        public void Add(int b) {
            a = b;

        }

        public IEnumerator GetEnumerator() {
            throw new NotImplementedException();
        }
    }

如一个实现IEnumerable的类Demo,在实例化的时候可以这样写

Demo demo = new Demo() { 2 };
Console.WriteLine(demo.a);

输出的结果为2。至于接口要实现的地方是获得相关的枚举器,在遍历的时候使用的。
实现的方式如下:

public IEnumerator GetEnumerator() => this.GetEnumerator();

如果是要在类里面存储另一种类的集合,要继承的接口为
IEnumerable
要实现的方法还要加上

IEnumerator<T> IEnumerable<T>.GetEnumerator() {
            throw new NotImplementedException();
        }

2.使用类管理另一个类对象集合
①先声明一个Stock类

 class Stock {
        public string Ticker
        {
            get; set;
        }

        public double GainLoss
        {
            get; set;
        }

    }

string的名字 和double的盈亏
②声明一个管理类StockPortfolio

 class StockProtfolio : IEnumerable<Stock> {
        //存储Stock类型的列表
        private List<Stock> _stocks;

        //ctor初始化_stocks
        public StockProtfolio() {
            _stocks = new List<Stock>();
        }


        //实现Add方法,以便对_stocks添加数据
        public void Add(string ticker, double gainloss) {
            _stocks.Add(new Stock() { Ticker = ticker, GainLoss = gainloss });

        }

        //进行升序排序,并且返回存有前topNumber的IEnumerable的集合
        public IEnumerable<Stock> GetWorstPerformers(int topNumber) =>
            _stocks.OrderBy((Stock stock) => stock.GainLoss).Take(topNumber);

        //从_stocks中删除与IEnumerable中相同的数据
        public void SellStocks(IEnumerable stocks) {
            foreach (Stock s in stocks)
            {
                _stocks.Remove(s);
            }

        }

        //打印_stocks中的内容
        public void Printportfolio(string title) {
            Console.WriteLine(title);
            foreach (var item in _stocks)
            {
                Console.WriteLine($"{item.Ticker} : {item.GainLoss}");
            }
        }

        //获得枚举器
        public IEnumerator<Stock> GetEnumerator() =>
            _stocks.GetEnumerator();

        //获得枚举器
        IEnumerator IEnumerable.GetEnumerator() => this.GetEnumerator();
    }

一个存储Stock类对象的List,其余的都是对这个List的操作
③使用

StockProtfolio tech = new StockProtfolio()
            {
                {"U081",-10.5},
                {"C#11",2.0},
                {"DJ22",12.3},
                {"Nov1",0.5},
                {"BCE5",-35.2},
                {"F777",4.0},
                {"R888",9.16},
                {"T999",6.11},
            };

            tech.Printportfolio("Starting Protfolio");
            //删除收益倒数的三个值
            var worstPerformers = tech.GetWorstPerformers(3);
            Console.WriteLine("Selling the worst performers:");
            foreach (var item in worstPerformers)
            {
                Console.WriteLine($"{item.Ticker} :{item.GainLoss}");
            }

            tech.SellStocks(worstPerformers);

            tech.Printportfolio("After Selling Worst 3 Performers");
        }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值