调用无效参数拉姆达会产生编译错误

问题描述:

从这个问题:Lambda expression with a void input调用无效参数拉姆达会产生编译错误

我有以下的代码非常简单:

 int minutes =() => 9; 

我得到编译器错误:

Cannot convert lambda expression to type 'int' because it is not a delegate type

我我发现了几个关于这个错误的问题,但他们都是关于更具体的问题。其实我是想给我的拉姆达一个身体,但想我会从简单的开始首先要检查我的语法:

//I know this is a weird example 
int minutes =()=> { if(x==9) return 9; else return 5;} 
+7

'()=> 9'是'Func键'或'表达>'不是'int'。 – Lee

+2

@Lee是对的,这里是一个小提琴 https://dotnetfiddle.net/K3MoCc –

+0

现在好了,我知道它是'Expression >'一切都很清楚@SalvadorGuerrero谢谢你的扩展...我必须分配我的lambda到一个明确的类型变量?我不能立即调用它,或者分配给一个普通的'var'? –

C# guide

A lambda expression is a block of code (an expression or a statement block) that is treated as an object. It can be passed as an argument to methods, and it can also be returned by method calls.

...

Lambda expressions are code that can be represented either as a delegate, or as an expression tree that compiles to a delegate.

这意味着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 as delegate and expression tree