2017-04-07 68 views
-5

從這個問題: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'? –

回答

0

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