我有以下对象,在我的构造函数中,我添加了一个新的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
}
有可能吗?
答案 0 :(得分:8)
不,你不能这样做。你必须在一个单独的声明中设置它:
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();
答案 1 :(得分:1)
否 - 您无法在初始化程序中访问对象的属性。初始化程序基本上是程序员的一些语法糖。
考虑以下情况:
class Program
{
static void Main()
{
var Id = "hello";
var obj = new MyObject
{
Test = Id // Get new GUID created in constructor
};
}
}
你指定的Id
(如果你的想法是有效的,再次,它不是),不一定是你得到的Id
。