C#Lambda令人费解的行为

1 c# clr lambda

Func<Classification, string> test1 = c => c.Id = "x"; 
Func<Classification, string> test2 = c => { return c.Id = "x";}; 
Run Code Online (Sandbox Code Playgroud)

我已经和lambda一起工作了将近一年左右,并且相当合理,但今天我正在看NBuilder并看到一个奇怪的Func,似乎与这些例子不符.无论如何我都玩了它但是我不知道为什么上面的编译更不用说了.我们正在做一个作业,因此表达式不评估任何东西,对吧??? 或不

所以我想也许我错过了与lambda有关的东西,所以我尝试了别的东西:

    [Test]
    public void AmIGoingMad()
    {
        Assert.That(Test(),Is.Null); // not sure what to expect - compile fail?
    }

    public string Test()
    {
        string subject = "";
        return subject = "Matt";
    }
Run Code Online (Sandbox Code Playgroud)

果然AmIGoingMad失败了,"Matt"实际上已经归还了.

为什么我们有这种行为?这记录在哪里?它纯粹是一种句法快捷方式吗?

我觉得我在理解lambda甚至C#时都错过了一些基本的东西.

感到愚蠢.

Eri*_*son 9

赋值语句具有返回值 - 该值是已分配的值.即使C有这个,所以你可以把如下的作业链接在一起:

a = b = c = d = 10;
Run Code Online (Sandbox Code Playgroud)

对d的赋值的返回值为10,它被赋值给c,依此类推.