如何使用List<>创建一个类成员不可变?

时间:2016-05-11 17:26:02

标签: c# immutability

例如

class School
{
    public List<Student> Students {get; private set;}
}

此处School不是不可变的,因为getter Students是一个可变集合。如何使类不可变?

2 个答案:

答案 0 :(得分:5)

您可以改为公开an immutable list

class School
{
    private readonly List<Student> _students = new List<Student>();

    public ReadOnlyCollection<Student> Students
    {
        get { return _students.AsReadOnly(); }
    }
}

当然,这样做仍然对Student对象没有影响,因此要完全不可变,Student对象需要是不可变的。

答案 1 :(得分:3)

只需将您的支持字段设为私有字段,并使公共属性的getter返回列表的只读版本。

class School
{
    private List<Student> students;

    public ReadOnlyCollection<Student> Students
    {
        get
        {
            return this.students.AsReadOnly()
        }

        private set;
    }
}