为什么Lambda表达式中的方法?

时间:2016-04-10 16:52:11

标签: c# methods lambda

在C#6.0中,Microsoft引入了以lambda表达式形式编写方法的能力(实际上,它介于功能块和纯lambda表达式之间;我不确定它是否均匀真正的lambda表达式)。通常,这就是我编写方法的方法:

private static int Add(int x, int y) { 
    return x + y; 
}

但是,从C#6.0开始,可以重写相同的方法:

private static int Add(int x, int y) => x + y; 

我不明白的是,为什么我会使用后者来支持前者呢?它是纯粹时尚还是在某些情况下,取消功能块实际上是有益的?就可读性而言,对我而言,第二种形式看起来有点不同寻常。我可以更好地与第一个相关联。

2 个答案:

答案 0 :(得分:8)

来自C# : The New and Improved C# 6.0

  

表达身体的功能没有什么特别激进的。与C#6.0中的大多数功能一样,它们旨在为实现简单的情况提供简化的语法。

答案 1 :(得分:0)

我很惊讶,但lambda定义实际上导致的IL比原来少。

原件:

// Method begins at RVA 0x2074
// Code size 9 (0x9)
.maxstack 2
.locals init (
    [0] int32
)

IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldarg.1
IL_0003: add
IL_0004: stloc.0
IL_0005: br.s IL_0007

IL_0007: ldloc.0
IL_0008: ret

LAMBDA:

// Method begins at RVA 0x2089
// Code size 4 (0x4)
.maxstack 8

IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: add
IL_0003: ret

因此可能会有一些轻微的性能优势。但是,似乎只有在没有优化的情况下构建或调试器时才会出现这种情况;有关详细信息,请参阅答案here。因此,在优化之后,答案可能只是一种风格选择。