C#Object Initializer:从另一个设置属性

时间:2013-03-05 16:34:17

标签: c# object-initializers

我有以下对象,在我的构造函数中,我添加了一个新的Guid作为Id。

public class MyObject
{
  public MyObject()
  {
    Id = Guid.NewGuid().ToString();
  }

  public String Id { get; set; }
  public String Test { get; set; }

}

我想在对象初始化器中做类似的事情:

var obj = new MyObject
{
  Test = Id; // Get new GUID created in constructor
}

有可能吗?

2 个答案:

答案 0 :(得分:8)

不,你不能这样做。你必须在一个单独的声明中设置它:

var obj = new MyObject();
obj.Test = obj.Id;

对象初始值设定项中属性的右侧只是一个普通表达式,与正在初始化的对象没有固有的连接。

如果您经常想要使用某种特定类型,则可以添加方法:

public MyObject CopyIdToTest()
{
    this.Test = Id;
    return this;
}

然后使用:

MyObject obj = new MyObject().CopyIdToTest();

或与其他属性:

MyObject obj = new MyObject 
{
    // Set other properties here
}.CopyIdToTest();

答案 1 :(得分:1)

否 - 您无法在初始化程序中访问对象的属性。初始化程序基本上是程序员的一些语法糖。

考虑以下情况:

class Program
{
    static void Main()
    {
     var Id = "hello";
    var obj = new MyObject
        {
            Test = Id // Get new GUID created in constructor
        };
    }
}

你指定的Id(如果你的想法是有效的,再次,它不是),不一定是你得到的Id