如何在 C# 中的 class 中创建一个自动实现的列表 属性?

How do I create an auto-implemented list property in a class in C#?

首先,我制作了一个 class 字段,如下所示:

class Person
{
    public string name;
    public List<Thing> things = new List<Thing>();

    public Person(string name)
    {
        this.name = name;
    }
}

并直接更改 class 之外的字段 things,但后来发现这不是最佳做法,因为 class 的字段应该是私有的,并且可以使用 public 属性代替。我决定将这些字段更改为自动实现的属性,因为我目前不需要在属性中进行任何验证:

class Person
{
    public string Name { get; set; }
    public List<Thing> Things { get; set; }

    public Person(string name)
    {
        this.Name = name;
    }
}

根据自动实现属性的 MSDN 页面 (https://msdn.microsoft.com/en-us/library/bb384054.aspx),编译器为 属性 创建了一个私有支持字段。

但是,对于列表 属性 我不确定编译器是否会自动实例化列表支持字段,所以我的问题是 会让列表作为自动实现的属性像上面的第二个示例一样工作,或者我是否也需要实例化列表,如果是这样我应该怎么做?

I'm not sure whether the compiler automatically instantiates the list backing field

没有。如果不实例化,默认为null。

do I need to instantiate the lists as well, and if so how should I do this?

需要自己实例化。这是 usually/can 在构造函数中完成的。例如:

public Person(string name) 
{
    this.Name = name;
    this.Things = new List<Thing>();
}