C#中的集合和对象初始值设定项

时间:2018-01-13 23:32:27

标签: c#

我需要在下面显示的分层数据集中存储对父对象的引用。 甚至可以使用对象初始化器吗?是否有任何关键字引用'父'初始值设定项,或者我必须以经典方式执行此操作 - 首先声明父对象?

(我不知道在'?'字符之间写什么)

Scenarios.Add(new Scenario()
{
    scenarioNumber = Scenarios.Count,
    scenarioDescription = "Example scenario",
    Steps = new BindingList<Step>()
    {
        new Step(){ parent = ?Scenario?, stepNumber = 1, subSteps = new BindingList<Step>() },
        new Step(){ parent = ?Scenario?, stepNumber = 2, subSteps = new BindingList<Step>() },
        new Step(){ parent = ?Scenario?, stepNumber = 3,
            subSteps = new BindingList<Step>()
            {
                new Step() { parent = ?Step?, stepNumber = 1, subSteps = new BindingList<Step>() },
                new Step() { parent = ?Step?, stepNumber = 2, subSteps = new BindingList<Step>() },
            },
        }
    }
});  

3 个答案:

答案 0 :(得分:3)

对象初始值设定项构造不允许这样做。

您可以使用静态工厂方法,例如:

static Scenario Create(int scenarioNumber, string scenarioDescription, BindingList<Step> steps)
{
    var scenario = new Scenario()
    {
        scenarioNumber = scenarioNumber,
        scenarioDescription = scenarioDescription,
    };
    foreach (var step in steps)
    {
        step.parent = scenario;
    }
    scenario.Steps = steps;
    return scenario;
}

答案 1 :(得分:1)

不,这是不可能的。

您必须声明变量以保存父对象并手动添加它们,一次添加一个。初始化语法对此无法帮助您。

答案 2 :(得分:0)

对我来说,不可能避免父创建然后影响它:据我所知,对象初始化器正在做它的工作,好像它在构造函数中,所以你的父Scenario实例不是在初始化其内部集合时创建

抱歉,如果我弄错了