表达Lambda与Statement Lambda

sen*_*nfo 17 c# lambda

从根本上说,单行表达式lambda和语句lambda之间有什么区别吗?请使用以下代码,例如:

private delegate void MyDelegate();

protected static void Main()
{
    MyDelegate myDelegate1 = () => Console.WriteLine("Test 1");
    MyDelegate myDelegate2 = () => { Console.WriteLine("Test 2"); };

    myDelegate1();
    myDelegate2();

    Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)

虽然我更喜欢第一个,因为我发现括号是丑陋的,两者之间是否有任何不同(除了明确的部分需要括号用于多行语句)?

Sti*_*gar 16

你需要语句lambda用于多语句lambdas.另外,LINQ to SQL等表达式提供程序不支持语句lambdas.在.NET 4.0之前,.NET Framework不支持语句表达式树.这是在4.0中添加的,但据我所知,没有提供商使用它.

Action myDelegate1 = () => Console.WriteLine("Test 1");
Expression<Action> myExpression = () => { Console.WriteLine("Test 2") }; //compile error unless you remove the { }
myDelegate1();
Action myDelegate2 = myExpression.Compile();
myDelegate2();
Run Code Online (Sandbox Code Playgroud)

否则他们是一样的.


cod*_*ife 10

反射器救援!反汇编的代码如下所示:

private static void Main(string[] args)
{
    MyDelegate myDelegate1 = delegate {
        Console.WriteLine("Test 1");
    };
    MyDelegate myDelegate2 = delegate {
        Console.WriteLine("Test 2");
    };
    myDelegate1();
    myDelegate2();
    Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)

所以不,两者之间没有真正的区别.要开心.


Ode*_*ded 8

两者是相同的 - 第一个是第二个语法糖,两个都将编译到同一个IL.