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
。