在C#中编写匿名函数的推荐方法是什么?

usr*_*usr 1 c# syntax lambda anonymous-methods

var seq = Enumerable.Range(1, 10).Reverse();
var sort1 = seq.OrderBy(i => i);
var sort2 = seq.OrderBy(delegate(int i) { return i; });
Run Code Online (Sandbox Code Playgroud)

我认为sort2更明确但排序1更短.除此之外,我真的不知道其中的区别.这样做的推荐方法是什么?

Jon*_*eet 12

Lambda表达式(IMO)在每种情况下优于匿名方法,除非您不关心参数,在这种情况下有一个很好的快捷方式:

// Lambda expression has to specify parameter types
EventHandler x = (sender, args) => Console.WriteLine("Hi");

// Anonymous method can ignore them
EventHandler x = delegate { Console.WriteLine("Hi"); };
Run Code Online (Sandbox Code Playgroud)

Lambda表达式还有另外两个"问题"IMO:

  • 如果你没有使用C#3,显然它们不可用.(虽然你可以从VS2008定位.NET 2.0并仍然使用它们.)
  • 无参数lambda表达式的语法有点笨重:

    () => stuff
    
    Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,除了简洁的语法之外,Lambdas还有一个优于代理的优势,因为它们可以根据需要由编译器处理成委托或表达式树.一种功能,可以以编程方式操作作为lambdas传入的表达式. (3认同)