// simplest form; no types, no brackets
Func
// optional exlicit argument brackets
Func
// optional type specification when used with brackets
Func
// multiple arguments require brackets (types optional)
Func
// multiple argument with explicit types
Func
The signature of the lambda must match the signature of the delegate used (whether it is explicit, like above, or implied by the context in things like .Select(cust => cust.Name)
You can use lambdas without arguments by using an empty expression list:
// no arguments
Func
Ideally, the expression on the right hand side is exactly that; a single expression. The compiler can convert this to either a delegate or an Expression tree:
// expression tree
Expression
However; you can also use statement blocks, but this is then only usable as a delegate:
// braces for a statement body
Func
int z = x * y;
Console.WriteLine(z);
return z;
};
Note that even though the .NET 4.0 Expression trees support statement bodies, the C# 4.0 compiler doesn't do this for you, so you are still limited to simple Expression trees unless you do it "the hard way"; see my article on InfoQ for more information.
No comments:
Post a Comment