Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的集合和对象初始值设定项#_C# - Fatal编程技术网

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

C# C语言中的集合和对象初始值设定项#,c#,C#,我需要在如下所示的分层数据集中存储对父对象的引用。 甚至可以使用对象初始值设定项吗?是否有任何关键字引用了“parent”初始值设定项,或者我必须以经典的方式执行此操作—首先声明parent对象 (我不知道在“?”字符之间写什么) Scenarios.Add(新方案() { scenarioNumber=Scenarios.Count, scenarioDescription=“示例场景”, 步骤=新建绑定列表() { 新步骤(){parent=?Scenario?,stepNumber=1,s

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

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

Scenarios.Add(新方案()
{
scenarioNumber=Scenarios.Count,
scenarioDescription=“示例场景”,
步骤=新建绑定列表()
{
新步骤(){parent=?Scenario?,stepNumber=1,subSteps=new BindingList()},
新步骤(){parent=?Scenario?,stepNumber=2,subSteps=new BindingList()},
新步骤(){parent=?Scenario?,步骤编号=3,
子步骤=新建绑定列表()
{
新步骤(){parent=?Step?,stepNumber=1,subSteps=new BindingList()},
新步骤(){parent=?Step?,stepNumber=2,subSteps=new BindingList()},
},
}
}
});  
不,这是不可能的


您必须声明变量来保存父对象,并手动添加它们,一次一个。初始值设定项语法在这里帮不了你。

对我来说,不可能避免父级创建,然后影响它:据我所知,对象初始值设定项正在做它的工作,就好像它在构造函数中一样,因此当你初始化它的内部集合时,你的父级
场景
实例还没有创建


如果我弄错了,很抱歉对象初始值设定项构造不允许这样做

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

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;
}
静态场景创建(int scenarioNumber、string scenarioDescription、BindingList步骤)
{
var场景=新场景()
{
scenarioNumber=scenarioNumber,
scenarioDescription=scenarioDescription,
};
foreach(var步进)
{
step.parent=场景;
}
情景。步骤=步骤;
返回场景;
}

创建场景后,仍然可以使用列表初始值设定项:
scenario.Steps=newbindingslist(){new Step(),new Step()}唯一的例外是子步骤
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;
}