防止其他类改变类中的列表

如果我有一个包含例如List 的类,并且我希望其他类能够看到列表但是没有设置它,我可以声明

public class SomeClass() { public List SomeList { get; } } 

这将允许另一个类访问SomeList而不设置它。

但是,尽管调用类无法设置列表,但它可以添加或删除元素。 我该如何预防呢? 我想我可以使用一个字段并返回List的副本而不是使用属性,但这感觉不对。

(这应该很简单但我必须遗漏一些……)

您将无法使用autoproperty。

 public class SomeClass() { private List someList; public IList SomeList { get { return someList.AsReadOnly(); } } } 

您将要将列表作为ReadOnly列表返回。 您可以使用以下代码执行此操作:

 using System.Collections.ObjectModel; public ReadOnlyCollection GetList() { return SomeList.AsReadOnly(); } 

返回IEnumerable ,它是不可变的。 getter应如下所示:

 public IEnumerable SomeList { get { foreach(string s in someList) yield return s; // excuse my inline style here, zealots yield break; } } 
 public class SomeClass() { private List _someList = new List(); public IList SomeList { get { return _someList.AsReadOnly(); } } }