php做网站实例,承德市隆化城乡建设局网站,公司注册资金100万是什么意思,小程序推广平台从委托的角度来看#xff0c;Lambda表达式与匿名方法没有区别。在【C#基础#xff1a;匿名方法】一文中#xff0c;我使用了匿名方法来调用ListT的FindAll方法。从C# 3.0开始#xff0c;在使用匿名方法的地方#xff0c;完全可以用Lambda表达式来代替。Lambda表达…从委托的角度来看Lambda表达式与匿名方法没有区别。在【C#基础匿名方法】一文中我使用了匿名方法来调用ListT的FindAll方法。从C# 3.0开始在使用匿名方法的地方完全可以用Lambda表达式来代替。Lambda表达式的定义方式为“([参数列表]) 表达式”。运算符“”是一种与赋值运算“”具有相同优先级的右结合运算符在英语里读作“goes to”。 现在回过头来看我们的例子。下面的代码与【C#基础匿名方法】一文中的代码具有相同的效果 view plaincopy to clipboardprint? class Program { static void Main(string[] args) { Liststring names new Liststring(); names.Add(Sunny Chen); names.Add(Kitty Wang); names.Add(Sunny Crystal); Liststring found names.FindAll ( // Lambda Expression Implementation name name.StartsWith( sunny, StringComparison.OrdinalIgnoreCase) ); if (found ! null) { foreach (string str in found) Console.WriteLine(str); } } } 上面的Lambda Expression Implementation在效果上与匿名方法没有任何区别“”左边的name定义了参数当参数个数为1的时候圆括号可以省略“”右边定义执行体。由于C# 3.0编译器具有Type Inference的能力参数类型与返回值都将由编译器通过上下文判定因此与匿名方法不同Lambda表达式的参数可以不给定参数类型。当所表示的匿名方法没有任何参数时Lambda表达式也同样可以使用只需在“”左边用一对圆括号表示即可。即 view plaincopy to clipboardprint? () Console.WriteLine(Hello!); 事实上“Lambda表达式”这一词比较笼统事实上“”运算符既可以表示Lambda表达式也可以表示Lambda语句。Lambda语句由代码块组成形式上很像匿名方法。请看下面的例子 view plaincopy to clipboardprint? class Program { static void Main(string[] args) { // Lambda 表达式 Funcint, bool dele1 n n 10; // Lambda 语句 Funcint, bool dele2 (int n) { return n 10; }; Console.WriteLine(dele1(16)); Console.WriteLine(dele1(8)); } } 两种定义方法同样可以正确地输出结果。请注意当我们希望构建表达式树的时候情况却完全不同了 view plaincopy to clipboardprint? // ok ExpressionFuncint, bool expr1 n n 10; // error: cannot converted to an expression tree ExpressionFuncint, bool expr2 (int n) { return n 10; }; 由此可见在构建表达式树的时候不能用Lambda语句带有代码语句的Lambda表达式而应该使用Lambda表达式。从这里就可以看出匿名方法与Lambda表达式的区别了。 有关委托的高级话题以及表达式树的内容我会在后面的文章中继续研究。