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