为什么不能在对象初始化器中访问对象本身或其属性?

时间:2018-02-06 13:41:35

标签: c# object-initializers

假设我们有这样一个类(非常基本的例子)

public class Foo
{
    public int A { get; set; }
    public string AString { get; set; }
}

我们使用对象初始值设定项对它进行初始化,如下所示:

Foo foo = new Foo
{
    A = 42,
    AString = 42.ToString()
}

存在冗余,因为我必须访问两次类型相同的对象(42)。 为什么无法在初始值设定项中访问对象(或其先前设置的属性),例如通过写作

Foo foo = new Foo
{
    A = 42,
    AString = foo.A.ToString()
}

或者为什么没有与this类似的关键字,以便我们可以这样写:

Foo foo = new Foo
{
    A = 42,
    AString = self.A.ToString()
              ^^^^
}

此外,因为写

是完全合法的
Foo foo = new Foo();
foo.A = 42;
foo.AString = foo.A.ToString();

在我看来,能够编写类似于对象初始化程序中的代码也是相当不错的。

修改 我知道构造函数和属性设置器可以用来设置传递属性,但这不是关于如何在实践中这样做,而是关于为什么不支持this的原因。

0 个答案:

没有答案