2013-03-05 76 views
4

我有以下对象,在我的构造函数中添加一个新的Guid作为Id。C#对象初始化程序:从另一个设置属性

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 
} 

这可能吗?

回答

8

不,你不能那样做。你必须设置它在一个单独的语句:

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

在对象初始属性的右手边就是一个普通的表达,与对象没有内在的联系被初始化。

如果这是你经常要与一个特定类型的做一些事情,你可以添加一个方法:

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

,然后使用:

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

或与其他属性:

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

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

考虑类似的情况:

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

Id你分配(如果你的想法是有效的,这再次,它是不是)不一定是Id你会得到。

+1

请注意构造函数*具有在执行初始化程序的“属性设置”部分之前完成的操作。 – 2013-03-05 17:06:30

+0

是的 - 我正在将初始化与构造混为一谈。为了清晰起见,我会编辑,谢谢。 – 2013-03-05 17:37:11