我有两个班级:
public class PageMeta
{
public PageMeta() { }
public string DataSource { get; set; }
public string TopicID { get; set; }
public string Title { get; set; }
}
public PersonViewModel()
{
PageMeta = new PageMeta
{
Title = "Test"
};
public PageMeta PageMeta { get; set; }
}
使用以下代码创建这些代码:
var r = new PersonViewModel();
r.PageMeta.DataSource="abc";
r.PageMeta.TopicID="def";
在现实生活中,我的课程更复杂,这只是一个例子。我想要做的是将PersonViewModel的创建与DataSource和TopicID的设置结合起来。
var r = new PersonViewModel {
PageMeta.DataSource="abc";
PageMeta.TopicID="def";
}
有没有办法在C#中完成?
答案 0 :(得分:5)
是
var r = new PersonViewModel {
PageMeta = {
DataSource = "abc",
TopicID = "def"
}
}
答案 1 :(得分:0)
是的,你可以在另一个对象初始化器中有一个对象初始化器:
var r = new PersonViewModel
{
PageMeta = { DataSource = "abc", TopicID = "def" }
};
这是有效的,因为您的PersonViewModel
构造函数会将PageMeta
初始化为新实例。因此,这会使用PageMeta
的{{1}}初始化get
属性的字段。
如果您没有在PageMeta
的构造函数中初始化PageMeta
的新实例(或PersonViewModel
是PageMeta
返回副本,那么getter赢了“你工作”,你可以通过struct
setter来访问它:
PageMeta