我的代码类似于:
class Foo
{
List<Bar> _myList;
...
public IEnumerable<Bar> GetList() { return _myList; }
}
GetList()的结果 NOT 应该是可变的。
为了澄清,如果Bar的实例被修改,则可以 我只是想确保集合本身没有被修改。
我确定我在某处找到了答案,有人指出这是可能的,但对于我的生活,我再也找不到了。
答案 0 :(得分:7)
已经提供的答案绝对可以正常使用,但我想我会补充一点,您可以在.NET 3.5中使用 AsReadOnly 扩展方法,如下所示:
class Foo
{
List<Bar> _myList;
...
public ReadOnlyCollection<Bar> GetList() { return _myList.AsReadOnly(); }
}
答案 1 :(得分:3)
您可以使用System.Collections.ObjectModel.ReadOnlyCollection
public ReadOnlyCollection<Bar> GetList() {return new ReadOnlyCollection<Bar>(_myList);}
答案 2 :(得分:1)
return new System.Collections.ObjectModel.ReadOnlyCollection<Bar>(_myList);
http://msdn.microsoft.com/en-us/library/system.collections.objectmodel.aspx
答案 3 :(得分:1)
您无法阻止在集合级别修改Bar元素。如果你只想要它不会有关于添加/删除/等的可变使用ReadOnlyCollection。
如果您需要强制执行每个元素都不可变,那么您必须在Bar类中强制执行该操作,即不要使用setter或任何更改Bar状态的方法。
答案 4 :(得分:0)
你可以从ReadOnlyCollecton公开IEnumerable,或者你可以这样做(假设是LINQ):
public IEnumerable<Bar> GetList() { return (from item in _myList select item); }