本文共 2156 字,大约阅读时间需要 7 分钟。
一、匿名类型
可通过使用 new 运算符和对象初始值创建匿名类型。示例:var v = new { Name = "Micro", Message = "Hello" };var v = new[] { new { Name = "Micro", Message = "Hello" }, new { Name = "Soft", Message = "Wold!" }};匿名类型通常用在查询表达式的 select 子句中,以便返回源序列中每个对象的属性子集。var Query = from p in v select new { p.Name };foreach (var o in Query){ Console.WriteLine(o.Name);}可以查找对象IEnumerable<v> results = people.Where(delegate(v p) { return p.Name == "Micro"; }); 二、匿名方法要将代码块传递为委托参数 例如:点击事件button1.Click += delegate(System.Object o, System.EventArgs e){ System.Console.WriteLine("Hello");};this.Loaded += delegate{ InitializeEvent();};加载事件this.Loaded += (sl, el) =>{ System.Console.WriteLine("Hello"); this.button1.Click += (sender, e) => { System.Console.WriteLine("Wold!"); }}匿名方法与线程System.Threading.Thread thread = new System.Threading.Thread(delegate(j){ System.Console.WriteLine("Hello");});thread.Start();System.Threading.ThreadPool.QueueUserWorkItem((s) =>{ Action f = () => { System.Console.WriteLine("Wold!"); };}使委托与匿名方法关联delegate void DEL(string s);private void Window_Loaded(object sender, RoutedEventArgs e){ DEL p = delegate(string j) { System.Console.WriteLine(j); }; p("Hello");}三、Func,Func是有返回值的泛型委托Func<int> 表示无参,返回值为int的委托Func<object,string,int> 表示传入参数为object, string 返回值为int的委托Func<object,string,int> 表示传入参数为object, string 返回值为int的委托Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void匿名方法只能在使用委托的时候创建,事实上,它们通过delegate关键字创建。使用示例:var func = new Func<bool, int>(delegate(bool x) { return x ? 10 : 5; });int ret = func(true);四、匿名事件btn.Click += delegate(object o, EventArgs e) { };五、Lambda 表达式,Func<T>委托MSDN中写道:“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式树类型。所有Lambda表达式都使用Lambda运算符=>左边是输入参数列表1.一个参数:param=>expr2.多个参数:(param-list)=>expr右边是表达式或语句块(参数列表)=>表达式或语句块 合法的Lambda表达式1、(x, y) => x * y //多参数,隐式类型=> 表达式 2、x => x * 5 //单参数, 隐式类型=>表达式 3、x => { return x * 5; } //单参数,隐式类型=>语句块 4、(int x) => x * 5 //单参数,显式类型=>表达式 5、(int x) => { return x * 5; } //单参数,显式类型=>语句块 6、() => Console.WriteLine() //无参数 在编写Lambda表达式时,可以忽略参数的类型,因为编译器能够根据上下文直接推断参数的类型,示例代码如下。(x, y) => x + y //多参数,隐式类型=> 表达式转载地址:http://epxkl.baihongyu.com/