C#扩展方法,查询运算符

it2023-09-17  81

扩展方法

class MyList : IEnumerable<int> { public IEnumerator<int> GetEnumerator() { yield return 1; yield return 3; yield return 4; yield return 7; yield return 7; yield return 9; } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } class Program { static int MyCount(MyList list) { int sum = 0; var e = list.GetEnumerator(); while(e.MoveNext()) { sum++; } return sum; } static int MyMax(MyList list) { int max = int.MinValue; var e = list.GetEnumerator(); while (e.MoveNext()) { if (e.Current > max) max = e.Current; } return max; } static void Main(string[] args) { var list = new MyList(); Console.WriteLine(MyMax(list)); Console.WriteLine(MyCount(list)); Console.Read(); } } //需求一:如果需要一个 MyList2 类,其他方法不变,那么代码的重复率又会很高 //解决办法:更改传入类型 MyList 为接口类型: static int MyCount(IEnumerable<int> list){···} static int MyMax(IEnumerable<int> list){···} //需求二:C#是面向对象编程,方法应该放在类中,而 MyCount、MyMax 是外置方法 //解决办法:将方法放在类中 class MyList : IEnumerable<int> { public IEnumerator<int> GetEnumerator() {···} IEnumerator IEnumerable.GetEnumerator() {···} public int MyCount() { int sum = 0; var e = this.GetEnumerator(); while (e.MoveNext()) { sum++; } return sum; } public int MyMax() { int max = int.MinValue; var e = this.GetEnumerator(); while (e.MoveNext()) { if (e.Current > max) max = e.Current; } return max; } } static void Main(string[] args) { var list = new MyList(); Console.WriteLine(list.MyCount()); Console.WriteLine(list.MyMax()); Console.Read(); } //需求三:MyList 和 MyList2 中都需要设置函数,代码重复率高并且无法封闭 //解决办法:使用扩展方法 // 1、定义静态类 2、定义静态方法 3、使用this关键字指示实例化对象 //新建一个MyList方法的静态类 static class MyListFunc { public static int MyCount(this MyList list)//该MyList是指希望给MyList类型的实例添加方法,list是指当前实例 { int sum = 0; var e = list.GetEnumerator(); while (e.MoveNext()) { sum++; } return sum; } public static int MyMax(this MyList list) { int max = int.MinValue; var e = list.GetEnumerator(); while (e.MoveNext()) { if (e.Current > max) max = e.Current; } return max; } } //将类型改为接口型 public static int MyCount(this IEnumerable<int> list)
最新回复(0)