在初始化块内传递调用对象

时间:2016-07-31 23:57:59

标签: c# constructor

我正在使用IEnumerable<Parent> linq语句创建一个Child集合Select()。我希望能够在启动器块内传递Parent to Child。

class Parent
{
    IEnumerable<Child> Children { get; set; }
}
class Child
{
    Parent Parent { get; set; }
}
//This is what i want to do
someList.Select(x => new Parent
    {
        Children = x.childList.Select(c => new Child
            {
                Parent = //How do i get this?
            }
    });

1 个答案:

答案 0 :(得分:1)

你不能这样做,因为在Select实例化子对象时,Parent对象尚未初始化。从本质上讲,这是一个鸡与蛋的问题。

但是,您可以使用花括号的委托,如下所示:

x => {
    var p = new Parent();
    p.Children = x.childList.Select(
        c => new Child { Parent = p }
    );
    return p;
}