如何公开一个 List<T>
,使其是只读的,但可以在类内私有地设置?
这种方式不起作用:
public List<string> myList {readonly get; private set; }
即使您执行以下操作:public List<string> myList {get; private set; }
你仍然可以这样做:
myList.Add("TEST"); //This should not be allowed
我猜你可能有以下几种方案:
public List<string> myList {get{ return otherList;}}
private List<string> otherList {get;set;}
private set;
不会导致Add()
或RemoteAt()
抛出编译时错误 或 运行时错误。从类外部使用私有 setter 向 List 添加内容是完全合法的。这就是为什么 Philip 建议使用ReadOnlyCollection
的第二种解决方案,以防止在需要此类行为的情况下对列表内容进行外部修改。 - Dan Bechardprivate set
变体在运行时失败,因为ReadOnlyCollection
执行了编译时检查。无论如何,答案已经非常清楚了,所以如果您和我都理解了,那就是最重要的。 (附言:我可以回复一个三年前的评论,并在 15 分钟内得到回应,这是 StackOverflow 用户中最好的特点之一)。 - Dan Bechard