[转]C#中的委托,匿名方法和Lambda表达式

一、简介 在.NET中,委托,匿名方法和Lambda表达式很容易发生混淆。我想下面的代码能证实这点。下面哪一个First会被编译?哪一个会返回我们需要的结果?即Customer.ID=5.答案是6个First不仅被编译,并都获得正确答案,且他们的结果一样。如果你对此感到困惑,那么请继续看这篇文章。 class Customer { public int ID { get``; set``; } public static bool Test(Customer x) { return x.ID == 5; } } ... List<Customer> custs = new List<Customer>(); custs.Add(``new Customer() { ID = 1 }); custs.Add(``new Customer() { ID = 5 }); custs.First(``new Func<Customer, bool``>(``delegate``(Customer x) { return x.ID == 5; })); custs.First(``new Func<Customer, bool``>((Customer x) => x.ID == 5)); custs.First(``delegate``(Customer x) { return x.ID == 5; }); custs.First((Customer x) => x.ID == 5); custs.First(x => x.ID == 5); custs.First(Customer.Test); 二、什么是委托? 现在你定义一个处理用户订单的购物车ShoppingCart类。管理层决定根据数量,价格等给客人折扣。做为其中的一部分,他们已经实现了处理订单时你要考虑一方面。不用考虑过多,你简单声明一个变量来保存有“吸引力的折扣”(magicDisCount),然后实现逻辑。 ...

August 8, 2013