调用void-parameter lambda会导致编译器错误

时间:2017-04-07 16:14:24

标签: c# linq lambda

从这个问题: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;}

1 个答案:

答案 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