C#对象初始化程序:从另一个设置属性
问题描述:
我有以下对象,在我的构造函数中添加一个新的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
}
这可能吗?
答
不,你不能那样做。你必须设置它在一个单独的语句:
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();
答
否 - 您无法在初始化程序中访问对象的属性。初始化程序基本上是程序员的一些语法糖。
考虑类似的情况:
class Program
{
static void Main()
{
var Id = "hello";
var obj = new MyObject
{
Test = Id // Get new GUID created in constructor
};
}
}
的Id
你分配(如果你的想法是有效的,这再次,它是不是)不一定是Id
你会得到。
请注意构造函数*具有在执行初始化程序的“属性设置”部分之前完成的操作。 – 2013-03-05 17:06:30
是的 - 我正在将初始化与构造混为一谈。为了清晰起见,我会编辑,谢谢。 – 2013-03-05 17:37:11