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

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

可能吗?

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

 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(); 

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

考虑以下情况:

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

您分配的Id (如果您的想法有效,再次,它不是),不一定是您将获得的Id