如何解决主/详细关系的对象初始化
我有两个类代表一个主详细信息关系,其中主对象包含明细,而明细对象引用主。我正在尝试使用对象初始化来实例化它们,但是不确定如何将主引用传递到细节中……也许不可能,但想问一下。
我有以下课程:
public class Detail
{
public Detail(string type,string value,Entity entity) {...}
public string Value { get; set; }
public Master Master { get; set; }
}
public class Master
{
public string ID { get; set; }
public IEnumerable<Detail> Details{ get; set; }
}
如果我想使用对象初始化器,如何将主引用传递给详细实例?
List<Master> = new List<Master>()
{
new Master()
{
Details= new List<Detail>()
{
new Detail()
{
Master = ???
}
}
}
};
解决方法
不管您的代码中有很多错误,您都不能使用对象初始化来引用父图的各个部分。您要么需要使用构造器,辅助器,设置器,要么要在事后设置它:
public class Master()
{
public Master(List<Detail> details)
{
details.ForEach(x => x.Master = this);
Details = details;
}
...
}
用法:
List<Master> = new List<Master>()
{
new Master(new List<details>{...})
}
或事实之后的示例,因为Details
是IEnumerable<T>
:
list.ForEach(x => x.Details.ToList().ForEach(y => y.Master = x));
,
您可以通过将Master.Details
作为设置Detail.Master
的完整属性来实现
public class Master
{
public string ID { get; set; }
public IEnumerable<Detail> Details
{
get => details;
set
{
foreach(var detail in value)
{
detail.Master = this;
}
this.details = value;
}
}
private IEnumerable<Detail> details { get; set; }
}
用法:
var master = new Master
{
Details = new List <Detail>
{
new Detail {}
}
};
Console.WriteLine(
master.Details.All(detail => detail.Master == master)
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。