匿名类型:
先上一个匿名类的例子吧:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DelegateDemo2 { class Program { static void Main(string[] args) { string mid = ",middle part"; //匿名方法的应用,在3.0以后就是用lambda表达式来代替了匿名方法 Func<string, string> anonDel = delegate(string param) { param += mid; param += "and this was added to the string."; return param; }; Console.WriteLine(anonDel("Start of string")); Console.ReadKey(); } } }
例子很简单,简单到大家一看就懂,但是我想提醒两点大家需要注意的地方:
1:在匿名方法中不能使用跳转语句(break、goto或则continue)跳转到该匿名方法的外部,反之亦然:匿名方法外部的跳转语句不能跳到该匿名方法的内部。
2:在匿名方法内部不能访问不安全的代码。另外,也不能访问在匿名方法外部使用的ref和out参数。但是可以使用在匿名发方法外部定义的其他变量。
Lambda表达式
在上面的代码中也说过可以用Lambda表达式替换到匿名类型,那么上面的代码用lambda表达式表示如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DelegateDemo3 { class Program { static void Main(string[] args) { string mid = ",middle part"; //Lambda表达式 Func<string, string> lambda = param => { param += mid; param += "and this was added to the string."; return param; }; Console.WriteLine(lambda("Start of string")); Console.ReadKey(); } } }
Lambda表达式的语法比匿名方法更简单。
Lambda运算符“=>”的左边是参数,右边是方法体(方法的实现代码)。