IList <t> .AsReadOnly扩展方法不适用于引用类型Collection </t>

时间:2012-02-29 09:47:31

标签: c# readonly

以下是示例代码: Readonly扩展不适用于引用类型集合。如果我将Employee更改为字符串然后它将工作。 有人可以解释为什么我会这样做。

        List<Employee> Emps = new List<Employee>(2)
        {
            new Employee(){EmpName="E1",Year=2012,EmpID=1},
            new Employee(){EmpName="E2",Year=2012,EmpID=2}
        };
        Emps.ForEach(emp => Debug.WriteLine(emp.EmpName));
        **IList<Employee> readonlyEmp = Emps.AsReadOnly();
        readonlyEmp[0].EmpName = "EMPUpdated";**
        foreach (var emp in readonlyEmp)
        {
            Debug.WriteLine(emp.EmpName);
        }

1 个答案:

答案 0 :(得分:9)

ReadOnlyCollection可防止修改集合中的引用。它不会阻止对引用对象的修改。如果您有ReadOnlyCollection<string>,则无法更改任何内容,因为string是不可变的。您的Employee课程是可变的,可以更改。

因此,显而易见的解决方案是使Employee不可变。使属性只读,并在构造函数中初始化它们。