readonly关键字不会使List <> ReadOnly?

Ric*_*ard 25 c# collections list

我在公共静态类中有以下代码:

public static class MyList
{
    public static readonly SortedList<int, List<myObj>> CharList;
    // ...etc.
}
Run Code Online (Sandbox Code Playgroud)

..但即使使用readonly我仍然可以从另一个类添加项目到列表:

MyList.CharList[100] = new List<myObj>() { new myObj(30, 30) };
Run Code Online (Sandbox Code Playgroud)

要么

MyList.CharList.Add(new List<myObj>() { new myObj(30, 30) });
Run Code Online (Sandbox Code Playgroud)

有没有办法让事物只读而不改变CharList的实现(它会打破一些东西)?如果我必须改变实现(使其不可更改),那么最好的方法是什么?我需要它是List <T,T>,所以ReadOnlyCollection不会这样做

Mar*_*ers 44

修饰符readonly意味着除了声明或构造函数之外,不能赋值.它并不意味着分配的对象成为不可改变的.

如果希望对象是不可变的,则必须使用不可变的类型.ReadOnlyCollection<T>您提到的类型是不可变集合的示例.有关如何为字典实现相同的内容,请参阅此相关问题:

  • 呵呵.正如在这个问题的答案中暗示的那样,.NET 4.5确实已经有了一个`ReadOnlyDictionary`.凉. (3认同)