locked
FAQs:Lambda表达式? RRS feed

答案

  • Lambda表达式和C# 2.0介绍的匿名方法类似,不过Lambda表达式更简洁灵活。所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。以下为Lambda表达式的一个例子:
    delegate int D1(int i);
    D1 myDelegate = x => x + 1;
    int j = myDelegate(5); // j = 6

    Lambda表达式&匿名方法
    我们用一个例子来演示下Lambda表达式,首先用C# 1.0委托,然后用C# 2.0匿名方法,最好把它写成Lambda表达式。

    如果我们想要找出所有基于London的客户,我们可以使用下面的C# 1.0委托来实现。
    LoadCustomers是一个返回客户集合的方法。
    class Customer
    {
        public string CustomerID { get; set; }
        public string CustomerName { get; set; }
        public string City { get; set; }
    }
    static void Main(string[] args)
    {
        List<Customer> customers = LoadCustomers();
        List<Customer> query =
             customers.FindAll(new Predicate<Customer>(CityEqualsLondon));
    }
    static bool CityEqualsLondon(Customer c)
    {
        return c.City.Equals("London");
    }

    现在,我们用C# 2.0匿名方法来写这段代码
    static void Main(string[] args)
    {
        List<Customer> customers = LoadCustomers();
        List<Customer> query =
            customers.FindAll(
            delegate(Customer c) { return c.City.Equals("London"); });
    }

    最后,我们使用C# 3.0的Lambda表达式来重写这段代码
    static void Main(string[] args)
    {
        List<Customer> customers = LoadCustomers();
        List<Customer> query =
             customers.FindAll(c => c.City.Equals("London"));
    }

    可以看出Lambda表达式相比而言简洁很多。

    其他的信息,请参阅Lambda 表达式(C# 编程指南)


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手
    2011年3月2日 10:35