C# 将匿名方法转换为lambda表达式

C# 将匿名方法转换为lambda表达式,c#,lambda,anonymous-methods,C#,Lambda,Anonymous Methods,如果我要翻译这个匿名方法: Func<int, int> f = delegate(int i) { return i + 1; }; Func f=委托(int i) { 返回i+1; }; 转换为lambda表达式,它将如下所示: Func<int, int> f = i => i + 1; Func f=i=>i+1; (我知道:这个lambda表达式将秘密生成另一个匿名方法(由编译器生成),但这不是重点) 现在,我想将以下方法转换为lamb

如果我要翻译这个匿名方法:

Func<int, int> f = delegate(int i)
{
     return i + 1;
};
Func f=委托(int i)
{
返回i+1;
};
转换为lambda表达式,它将如下所示:

Func<int, int> f = i => i + 1;
Func f=i=>i+1;
(我知道:这个lambda表达式将秘密生成另一个匿名方法(由编译器生成),但这不是重点)

现在,我想将以下方法转换为lambda表达式:

Func<int, int> f = delegate(int i)
{
     Debug.WriteLine("Inside the function!");
     return i + 1;
};
Func f=委托(int i)
{
WriteLine(“函数内部!”);
返回i+1;
};

有没有办法以及如何做到这一点?

Lambdas可以包含多行,本例中的语法类似于C#2.0中的匿名委托:

Func f=i=>
{
WriteLine(“函数内部!”);
返回i+1;
};

Lambdas可以包含多行,本例中的语法类似于C#2.0中的匿名委托:

Func f=i=>
{
WriteLine(“函数内部!”);
返回i+1;
};

您所说的“lambda表达式将秘密生成另一个anymous方法”是什么意思?那不是真的。。。(在IL中会为lambda表达式或匿名方法生成一个方法,但这不像lambda表达式被翻译成匿名方法,然后按照正常方式编译。)@Jon:据我所知,lambda表达式仅在类型
f
表达式时创建。在本例中,
f
是一个委托,这会迫使编译程序创建一个异常的方法,不是吗?不,您很困惑
i=>i+1
是一个lambda表达式。lambda表达式和匿名方法都是源代码级构造,都可以转换为委托类型。另外,lambda表达式可以转换为表达式树。@Jon:我完全同意你所说的。但我仍然看不出我的问题“错”在哪里。如果我把那一行中的“a”替换成“this”,会不会改变呢?你所说的lambda表达式生成匿名方法的事实要么是错误的,要么就是措辞非常糟糕。不清楚您的意思是什么,您之前关于“lambda表达式只创建了…”的评论肯定是错误的。您所说的“lambda表达式将秘密生成另一个anymous方法”是什么意思?那不是真的。。。(在IL中会为lambda表达式或匿名方法生成一个方法,但这不像lambda表达式被翻译成匿名方法,然后按照正常方式编译。)@Jon:据我所知,lambda表达式仅在类型
f
表达式时创建。在本例中,
f
是一个委托,这会迫使编译程序创建一个异常的方法,不是吗?不,您很困惑
i=>i+1
是一个lambda表达式。lambda表达式和匿名方法都是源代码级构造,都可以转换为委托类型。另外,lambda表达式可以转换为表达式树。@Jon:我完全同意你所说的。但我仍然看不出我的问题“错”在哪里。如果我把那一行中的“a”替换成“this”,会不会改变呢?你所说的lambda表达式生成匿名方法的事实要么是错误的,要么就是措辞非常糟糕。不清楚你的意思是什么,你之前关于“lambda表达式只是创建的…”的评论肯定是错误的。
Func<int, int> f = i =>
{
     Debug.WriteLine("Inside the function!");
     return i + 1;
};