51

In a new C# 6.0 we can define methods and properties using lambda expressions.

For instance this property

public string Name { get { return First + " " + Last; } }

can be now defined as follows:

public string Name => First + " " + Last; 

The information about expression-boided function members you can find here: http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx

Does anyone know if there's any overhead when using new syntax? Can it slow down (or improve efficiency of) the application or maybe it doesn't matter?

Arkadiusz Kałkus
  • 17,101
  • 19
  • 69
  • 108
  • 19
    It is just syntax sugar, it doesn't affect the generated code at all. Use ildasm.exe to convince yourself. – Hans Passant Feb 09 '15 at 13:55
  • 2
    I don't know this feature, but i'm fairly sure that every syntactic sugar is just compiled to the same code. So there is no difference in runtime performance. – Tim Schmelter Feb 09 '15 at 13:55

2 Answers2

80

In a new C# 6.0 we can define methods and properties using lambda expressions.

No, you can't. You can define method and property bodies using syntax which looks like a lambda expression, in that it uses the token =>.

However, importantly this does not mean that there's a delegate type involved. (Whereas a lambda expression is only permitted in a context where it's converted to an expression tree or delegate type.)

This is purely syntactic sugar. Your two example code snippets will compile to the exact same IL. It's just a different way of representing the body of a property getter or method.

Jon Skeet
  • 1,421,763
  • 867
  • 9,128
  • 9,194
  • @JonSkeet This still true years / versions / enhancements later?... granted compilers are smart for inlining and such... but wouldn't there potentially be better odds / a different / more efficient way to transition from the caller to the expression evaluation?... I say this admittedly knowing almost 0 of IL or rosalyn, maybe just hopeful :) ... thanks! – Scott Brickey Apr 27 '20 at 03:27
  • @ScottBrickey: I'm not sure what you're expecting - a method (or whatever) is still just a method. If you're thinking of things like inlining, that's an optimization the JIT compiler can make. But adding a delegate type in there definitely wouldn't make it more efficient. – Jon Skeet Apr 27 '20 at 05:33
10

They will compile down to the same IL, you can always test this yourself by doing it and using ildasm to extract the IL.

tolanj
  • 3,651
  • 16
  • 30