四个代码让你明白委托,匿名函数,Lamda表达式
2017-03-11 14:34
309 查看
先来一个你看不懂的代码:
namespace Delegate { class 最终 { public delegate string DelNames(string name); static void Main(string[] args) { string[] names = { "wUangWU", "ZhangSan", "LISI" }; OperatorStr(names,(string name) => { name = name.ToUpper();return name; }); Console.ReadKey(); } public static void OperatorStr(string[] names, DelNames dns) { for (int i = 0; i < names.Length; i++) Console.WriteLine(dns(names[i])); } } }我相信对于没有这方面基础或刚学的人来说很难看懂,没关系,请看下面这个代码你一定看的懂class 开始{static void Main(string[] args){string[] names = { "wUangWU", "ZhangSan", "LISI" };ToUpperStr(names);//ToLowerStr(names);for (int i = 0; i < names.Length; i++)Console.WriteLine(names[i]);Console.ReadKey();}public static void ToUpperStr(string[] names){for (int i = 0; i < names.Length; i++)names[i] = names[i].ToUpper();}public static void ToLowerStr(string[] names){for (int i = 0; i < names.Length; i++)names[i] = names[i].ToLower();}}
}
这是中规中矩的代码,将字符串的大小写转换,再看下三个代码:
class 委托的使用 { public delegate void DelNames(string[] name); static void Main(string[] args) { string[] names = { "wUangWU", "ZhangSan", "LISI" }; DelNames dns = new DelNames(ToUpperStr); DelNames dns1 = new DelNames(ToLowerStr); dns(names); dns1(names); for (int i = 0; i < names.Length; i++) Console.WriteLine(names[i]); Console.ReadKey(); } public static void ToUpperStr(string[] names) { for (int i = 0; i < names.Length; i++) names[i] = names[i].ToUpper(); } public static void ToLowerStr(string[] names) { for (int i = 0; i < names.Length; i++) names[i] = names[i].ToLower(); } }使用了委托
class 委托的简化V_3 { public delegate string DelNames(string name); static void Main(string[] args) { string[] names = { "wUangWU", "ZhangSan", "LISI" }; //DelNames dns = ToUpperStr; //对这一步的简化 OperatorStr(names, delegate(string name) //加上string的原因是要指明函数的类型,使用的是那种类型的委托 { name = name.ToUpper(); return name; }); //对这步骤的简化,在编译的时候自动new dns的实例化 for (int i = 0; i < names.Length; i++) Console.WriteLine(names[i]); Console.ReadKey(); } public static void OperatorStr(string[] names, DelNames dns) { for (int i = 0; i < names.Length; i++) //对这一步骤的简化,抽象出共同代码部分,实现函数作为参数 names[i] = dns(names[i]); } //使用匿名函数减少代码量,只使用一次的时候,使用匿名函数 } class 委托的简化V_4 { public delegate string DelNames(string name); static void Main(string[] args) { string[] names = { "wUangWU", "ZhangSan", "LISI" }; // DelNames dns =(string name)=> //{ // name = name.ToUpper(); // return name; // }; //对这一步的简化(Lamda表达式和匿名函数的使用) OperatorStr(names, (string name) => { name = name.ToUpper(); return name; }); Console.ReadKey(); } public static void OperatorStr(string[] names, DelNames dns) { for (int i = 0; i < names.Length; i++) //对这一步骤的简化,抽象出共同代码部分,实现函数作为参数 Console.WriteLine(dns(names[i])); } //使用匿名函数减少代码量,只使用一次的时候,使用匿名函数 }我相信看到这里你应该懂了,快点动手试试
相关文章推荐
- 委托详解(匿名函数、Lamda表达式、多播委托)
- 委托的用处及匿名函数(lamda表达式)
- 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托
- C#中委托,匿名函数,lamda表达式复习
- 【转】【UNITY3D 游戏开发之七】C# 中的委托、事件、匿名函数、Lambda 表达式
- 代码简洁之道:C++ 11 之auto+ for_each + lamda表达式
- 委托、匿名函数、lambda表达式
- C# 委托、事件,lamda表达式
- 关于委托Lamda表达式等的一个小例子
- 委托(泛型委托、lamda表达式、用委托进行窗体传值、多播委托
- 委托 事件 lamda表达式
- 委托,匿名函数和lambda表达式
- 3 委托、匿名函数、lambda表达式
- 用一个实例说说委托,匿名委托,Lamda表达式
- 委托、匿名函数、Lambda表达式和事件的学习
- 委托、匿名函数与Lambda表达式初步
- (11)委托和Lamda表达式
- 通过代码学习C#&.NET——委托使用(正则表达式替换)
- C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质
- 代码简洁之道:C++ 11 之auto+ for_each + lamda表达式