为什么 C# 对象初始值设定项有这种行为?

Why does C# object initializer has this behaviour?

为什么 C# object initializer 有这种行为?

public class ChuckNorris
{
    public string Impact { get; set; }
}

public class Burnination
{
    public string Impact { get; set; }

    public ChuckNorris GetChuck()
    {
        var chuckNorris = new ChuckNorris
        {
            Impact = Impact // <- Why does the right hand "Impact" property here automatically refers to "Burnination.Impact" and not "chuckNorris.Impact"
        };

        return chuckNorris;
    }
}

如上面代码中的注释所说。为什么右手 Impact 属性 指向 Burnination.Impact 而不是 Impact 属性 ChuckNorrisclass。我(开发人员)指的是基础 class 的影响 属性 是如何做出这种假设的?

基本上,= 的 RHS 上的表达式会像在任何其他上下文中一样被解析和计算。所以你可以有:

ChuckNorris chuck1 = new ChuckNorris { Impact = "foo" };
ChuckNorris chuck2 = new ChuckNorris { Impact = chuck1.Impact };

只有左侧赋值的标识符隐含地与正在创建的对象有关。

范围属于 class Burnination,因此隐式引用 "this"。

其他人已经回复了你,但请注意:

public class ChuckNorris
{
    public string Kick { get; set; }
    public string Punch { get; set; }
}

var cn = new ChuckNorris
{
    Kick = "Dead",
    Punch = Kick
};

这不编译

object initializer 的赋值中,您不能引用正在创建的对象的 fields/properties/methods。