匿名方法和Lambda表达式
出于MVVM学习的需要,复习下匿名方法和Lambda表达式,因为之前用的也比较少,所以用的也不是很熟练,Baidu下相关的知识,写了这个Demo,目标是用简单的方法展示这个怎么用。
这里偏重的和LINQ中的Lambda表达式
var filesLookup = files.ToLookup(f=>f.Substring(f.LastIndexOf('.')).ToUpper());
有些不同,两种不同的地方使用吧。
DebugLZQ把要写的话,都写在Demo的注释中了,相关类似的东西网上很多,这里就不墨迹了,如下:
using System; namespace 匿名函数和Lambda表达式 { class Program { /// <summary> /// Func和Action类是特殊的类型,它们允许你在不必指定自定义委托类型的情况下,去使用委托。在整个.NET框架中都可以使用它们。 /// /// Lambda表达式已经广泛代替了匿名方法,因为它是从C# 3.0开始引入的。Lambda表达式与匿名方法有很多同样的功能,但更便于使用。 /// </summary> /// <param name="args"></param> static void Main(string[] args) { //Action委托封装不返回结果的方法。换句话说,这种委托只能用于以void关键字定义的那些方法。 Action<int,int> funa = delegate(int x, int y) { Console.WriteLine(x+y); };//匿名方法 Action<int, int> funb = (int x, int y) => { int z = x + y; Console.WriteLine(z); };//Lambda表达式 //输出 funa(3, 4); funb(3, 4); Console.ReadKey(); //System.Func委托除了可以返回结果以外,它与Action委托完全相同。最简单的Func实现没有参数。 Func<int, int, int> fun1 = delegate(int x, int y) { return x * y; };//匿名方法 Func<int, int, int> fun2 = (int x, int y) => { return x * y; };//Lambda表达式 //输出 Console.WriteLine(fun1(3, 4)); Console.WriteLine(fun2(3, 4)); Console.ReadKey(); } } }
一图胜过千言,程序运行如下: