我有一个类包含一个集合.我想提供一个返回集合内容的方法或属性.如果调用类可以修改单个对象,但是我不希望它们从实际集合中添加或删除对象,那么可以.我已经把所有的对象复制到一个新的列表中,但是现在我想我可以把列表作为IEnumerable<>返回.
在下面的简化示例中,GetListC是返回集合的只读版本的最佳方式?
public class MyClass { private List<string> mylist; public MyClass() { mylist = new List<string>(); } public void Add(string toAdd) { mylist.Add(toAdd); } //Returns the list directly public List<String> GetListA { get { return mylist; } } //returns a copy of the list public List<String> GetListB { get { List<string> returnList = new List<string>(); foreach (string st in this.mylist) { returnList.Add(st); } return returnList; } } //Returns the list as IEnumerable public IEnumerable<string> GetListC { get { return this.mylist.AsEnumerable<String>(); } } }@H_301_5@
解决方法
您可以使用
List(T).AsReadOnly()
:
return this.mylist.AsReadOnly()@H_301_5@这将返回
ReadOnlyCollection
.