views:

338

answers:

5

Hello everybody, I read this interesting line here, in an answer by Jon Skeet.

The interesting line is this, where he advocated using a delegate:

Log.Info("I did something: {0}", () => action.GenerateDescription());

Question is, what is this ()=> operator, I wonder? I tried Googling it but since it's made of symbols Google couldn't be of much help, really. Did I embarrassingly miss something here?

+2  A: 

Creating an anonymous delegate to specified method.

Probably, in your case it will be a Func<string>

abatishchev
+25  A: 

This introduces a lambda function (anonymous delegate) with no parameters, it's equivalent to and basically short-hand for:

delegate void () { return action.GenerateDescription(); }

You can also add parameters, so:

(a, b) => a + b

This is roughly equivalent to:

delegate int (int a, int b) { return a + b; }
Simon Steele
Probably `return action.GenerateDescription();`, no?
abatishchev
@abatishchev: Thanks, fixed.
Simon Steele
Roughly, indeed. For my series on some of the subtle differences between the lambda syntax and the anonymous method syntax start here: http://blogs.msdn.com/b/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous-methods-part-one.aspx
Eric Lippert
@Eric Lippert: Thanks, that was an interesting read.
Simon Steele
+3  A: 

This is an example of a lambda expression you can learn more here.

Jake Pearson
Even better than sifting through SO is to go straight to the source: http://msdn.microsoft.com/en-us/library/bb397687.aspx
John K
+1  A: 

It's way to pass anonymous delegate without parameters as lambda expression.

Similar to this from .NET 2.0

Log.Info("I did something: {0}", delegate()
            {
                return action.GenerateDescription();
            });
PiRX
Probably `return action.GenerateDescription();`, no? Otherwise error "Can't cast void to string", something like that
abatishchev
@abatishchev, probably yes. Wrote it from top of my head, so I'm not sure it even compiles.
PiRX
Could you please try and if it will fail - edit your post please?)
abatishchev
+5  A: 

"=>" this is lambda operator, when we don't have any input parameters we just use round brackets before lambda operator.

syntax: (input parameters) => expression

htr