为什么初始化程序不能使用返回list <t>的属性?

tub*_*der 8 .net c# initializer

找不到这个问题的答案.它必须是显而易见的,但仍然是.

我尝试在这个简化的例子中使用初始化器:

    MyNode newNode = new MyNode 
    {
        NodeName = "newNode",
        Children.Add(/*smth*/) // mistake is here
    };
Run Code Online (Sandbox Code Playgroud)

其中Children是此类的属性,它返回一个列表.在这里,我遇到了一个错误,就像'无效的初始化成员声明符'.

这里有什么问题,你如何初始化这些属性?非常感谢提前!

Jon*_*eet 20

您不能在对象初始值设定项中调用类似的方法 - 您只能设置属性或字段,而不是调用方法.但是在这种情况下,您可能仍然可以使用对象和集合初始化器语法:

MyNode newNode = new MyNode
{
    NodeName = "newNode",
    Children = { /* values */ }
};
Run Code Online (Sandbox Code Playgroud)

请注意,这不会尝试为其分配新值Children,它将调用Children.Add(...),如下所示:

var tmp = new MyNode();
tmp.NodeName = "newNode":
tmp.Children.Add(value1);
tmp.Children.Add(value2);
...
MyNode newNode = tmp;
Run Code Online (Sandbox Code Playgroud)