1
如果我翻譯這個匿名方法:翻譯匿名方法到lambda表達式
Func<int, int> f = delegate(int i)
{
return i + 1;
};
爲lambda表達式,它會是這樣的:
Func<int, int> f = i => i + 1;
(我知道:這lambda表達式會偷偷生成另一個匿名方法(由編譯器),但這不是重點)。
現在我想下面的方法轉化爲lambda表達式:
Func<int, int> f = delegate(int i)
{
Debug.WriteLine("Inside the function!");
return i + 1;
};
有沒有辦法,我如何做到這一點?
你說的「lambda表達式會偷偷產生另一個anymous方法」是什麼意思?這不是真的......(在IL中將會產生一個方法* * lambda表達式*或*匿名方法,但它不像lambda表達式被轉換成匿名方法,然後按正常方式編譯。) – 2013-04-30 10:02:19
@Jon:就我所知,lambda表達式僅在類型「f」是「表達式」時創建。在這種情況下,'f'是一個委託,這迫使編譯創建一個可惡的方法,不是嗎? –
2013-04-30 10:14:34
不,你很困惑。 'i => i + 1' *是一個lambda表達式。 lambda表達式和匿名方法都是* source level *構造,並且都可以轉換爲委託類型。另外,lambda表達式可以轉換爲表達式樹。 – 2013-04-30 10:15:37