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");
}