【发布时间】:2013-04-24 05:04:02
【问题描述】:
如果我要翻译这个匿名方法:
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中会为either一个lambda表达式或一个匿名方法生成一个方法,但它不像lambda表达式被翻译成然后正常编译的匿名方法。)
-
@Jon:据我所知,只有当
f类型为Expression<Something>时才会创建 lambda 表达式。在这种情况下,f是一个委托,这会强制编译创建一个匿名方法,不是吗? -
不,你很困惑。
i => i + 1是一个 lambda 表达式。 lambda 表达式和匿名方法都是 source 级别 构造,并且都可以转换为委托类型。此外,lambda 表达式可以转换为表达式树。 -
@Jon:我同意你所说的一切。但我仍然看不出我的问题有什么“错误”。如果我在该行中将“a”一词替换为“this”,它会改变吗?
-
您所说的 lambda 表达式生成匿名方法的事实要么是错误的,要么是措辞非常糟糕。不清楚您的意思,您之前关于“仅创建 lambda 表达式...”的评论绝对是错误的。
标签: c# lambda anonymous-methods