在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;
我不明白的是,为什么我会使用后者来支持前者呢?它是纯粹时尚还是在某些情况下,取消功能块实际上是有益的?就可读性而言,对我而言,第二种形式看起来有点不同寻常。我可以更好地与第一个相关联。
答案 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。因此,在优化之后,答案可能只是一种风格选择。