匿名方法和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();            
        }
    }
}

一图胜过千言,程序运行如下:

 

 

posted @ 2012-12-06 22:34  DebugLZQ  阅读(742)  评论(0编辑  收藏  举报