C#中的集合和对象初始化器

3
我需要在下面的分层数据集中存储对父对象的引用。 使用对象初始化程序是否可能?是否有任何关键字可以引用“parent”初始化程序,还是必须按传统方式进行 - 首先声明父对象? (我不知道在“?”字符之间写什么)
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个回答

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
不,这是不可能的。 你需要声明变量来保存父对象,并手动添加它们,一个一个地添加。初始化语法在这里无法帮助你。

在创建场景之后,您仍然可以使用列表初始化器:scenario.Steps = new BindingList() {new Step(), new Step()}; 唯一的例外是对于子步骤。 - AdricoM

0

对我来说,不可能避免创建父级对象并影响它:据我所知,对象初始化器的工作方式就像在构造函数内部一样,因此当您初始化其内部集合时,父级Scenario实例尚未创建

如果我错了,请原谅


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接