4

我有以下对象,在我的构造函数中我添加了一个新的 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
}

是否可以?

4

2 回答 2

7

不,你不能那样做。您必须将其设置在单独的语句中:

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();
于 2013-03-05T16:35:18.387 回答
1

不——你不能在初始化器中访问对象的属性。初始化程序基本上是程序员的一些语法糖。

考虑以下情况:

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

The Id you'd assign (if your idea was valid, which again, it isn't) isn't necessarily the Id you'd be getting.

于 2013-03-05T16:40:44.813 回答