Can a C# lambda expression have more than one statement?
Solution 1:
Sure:
List<String> items = new List<string>();
var results = items.Where(i =>
{
bool result;
if (i == "THIS")
result = true;
else if (i == "THAT")
result = true;
else
result = false;
return result;
}
);
Solution 2:
(I'm assuming you're really talking about multiple statements rather than multiple lines.)
You can use multiple statements in a lambda expression using braces, but only the syntax which doesn't use braces can be converted into an expression tree:
// Valid
Func<int, int> a = x => x + 1;
Func<int, int> b = x => { return x + 1; };
Expression<Func<int, int>> c = x => x + 1;
// Invalid
Expression<Func<int, int>> d = x => { return x + 1; };
Solution 3:
You can put as many newlines as you want in a lambda expression; C# ignores newlines.
You probably meant to ask about multiple statements.
Multiple statements can be wrapped in braces.
See the documentation.
Solution 4:
Since C# 7:
Single line statement:
int expr(int x, int y) => x + y + 1;
Multiline statement:
int expr(int x, int y) { int z = 8; return x + y + z + 1; };
although these are called local functions I think this looks a bit cleaner than the following and is effectively the same
Func<int, int, int> a = (x, y) => x + y + 1;
Func<int, int, int> b = (x, y) => { int z = 8; return x + y + z + 1; };
Solution 5:
Func<string, bool> test = (name) =>
{
if (name == "yes") return true;
else return false;
}