C# 使用对象初始值设定项声明嵌套对象时,从匿名子对象引用匿名父对象

C# 使用对象初始值设定项声明嵌套对象时,从匿名子对象引用匿名父对象,c#,object-initializers,C#,Object Initializers,如果我有一组父、子、孙类,其中孙类需要它的父类作为构造函数参数,那么还有什么方法可以使用嵌套声明吗 例如,考虑发票抬头、发票线、发票线故障: 公共类InvoiceHeaderModel { 公共列表InvoiceLineModels{get;set;} } 公共类InvoiceLineModel { 公共列表InvoiceLineBreakdowns{get;set;} } 公共类发票明细 { 公共发票行细分(发票行模型父发票行) { _parentInvoiceLine=parentInvoi

如果我有一组父、子、孙类,其中孙类需要它的父类作为构造函数参数,那么还有什么方法可以使用嵌套声明吗

例如,考虑发票抬头、发票线、发票线故障:

公共类InvoiceHeaderModel
{
公共列表InvoiceLineModels{get;set;}
}
公共类InvoiceLineModel
{
公共列表InvoiceLineBreakdowns{get;set;}
}
公共类发票明细
{
公共发票行细分(发票行模型父发票行)
{
_parentInvoiceLine=parentInvoiceLine;
}
私有发票行模型_parentInvoiceLine;
}
我希望能够做到的是:

public InvoiceHeaderModel BuildAnInvoice()
{
返回新的InvoiceHeaderModel
{
InvoiceLineModels=新列表
{
新发票行模型
{
InvoiceLineBreakdowns=新列表
{
新的InvoiceLineBreakdown(/*需要引用匿名外部InvoiceLineModel*/),
新发票行细分()
}
}
}
};
}
但是我不能,因为
InvoiceLineBreakdown
的构造函数需要引用包含它的匿名
InvoiceLineModel


我知道有很好的理由不引用子对象中的父对象,但是有没有办法实现上面的嵌套声明(使用对象初始值设定项),或者我只需要显式声明所有对象,然后再组成发票头?

使用变量引用

下面是一个完整的示例:

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        var ihm = new 
    {
        InvoiceLineModels = new List<Object>
        {
           new {
               Test = 1,
               //ihm = ihm Can't be used here until the declaration is completed nor can this be used.
           }
        }
    };
        //ihm is available here 
        Console.WriteLine(ihm.ToString());
    }
}
使用系统;
使用System.Collections.Generic;
公共课程
{
公共静态void Main()
{
var ihm=新
{
InvoiceLineModels=新列表
{
新的{
测试=1,
//ihm=在声明完成之前,不能在此处使用ihm,也不能使用ihm。
}
}
};
//这里有ihm
Console.WriteLine(ihm.ToString());
}
}
看来你应该把这些过程分开;从数据库加载子项,然后将它们添加到要返回的列表中,该列表可以存储在ihm中。在查询过程中使用语法实现相同的功能


总之。分配等的POF在哪里。祝你好运

你能编辑模型类吗?C#对象初始值设定项并不完美-这就是一个这样的例子。就我个人而言,我避免使用它们,因为你无论如何不能将它们用于不可变的类型。@Sweeper:是的,我can@Dai:“对象初始化器”。。。谢谢,这就是我要找的术语!