从这个问题:Lambda expression with a void input
我有以下非常简单的代码:
int minutes = () => 9;
我收到编译错误:
无法将lambda表达式转换为' int'因为它不是 委托类型
我发现了有关此错误的几个问题,但他们都是关于更具体的问题。我实际上想给我的lambda一个身体,但我想我先从简单开始检查我的语法:
//I know this is a weird example
int minutes = ()=> { if(x==9) return 9; else return 5;}
答案 0 :(得分:0)
来自C# guide
lambda表达式是被视为对象的代码块(表达式或语句块)。它可以作为参数传递给方法,也可以通过方法调用返回。
...
Lambda表达式是可以表示为委托的代码,也可以表示为编译为委托的表达式树。
这意味着可以表示lambda表达式,它可以表示不同的东西:委托或表达式树。
你的表达
() => 9;
可以是很多不同的东西,例如
public class C {
delegate int IntDelegate();
public void M() {
Func<int> minutes = () => 9;
IntDelegate minutes2 = () => 9;
Expression<Func<int>> minutesExpression = () => 9;
Expression<IntDelegate> minutesExpression2 = () => 9;
}
}
那你想用什么?
顺便说一句,因为所有这些,你不能使用var。 你可以在这里看到c#编译器如何在不同的lambda下工作 - > lambda as delegate and expression tree