防止其他类改变类中的列表
如果我有一个包含例如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(); } } }