我有一个列表,并且我想提供对包含其内容的集合的只读访问。我该怎么做呢?
类似于:
public ICollection<Foo> ImmutableViewOfInventory() {
IList<Foo> inventory = new List<Foo>();
inventory.add(new Foo());
return inventory.ImmutableView();
}
此外,一个不可变的IEnumerable
也可以。
更新:我现在意识到列表的不可变视图实际上会更好。(保留列表排序语义。)
这不会给我提供列表行为,对吧:
public ReadOnlyCollection<PickUp> InventoryItems()
{
return new ReadOnlyCollection<PickUp>(inventory);
}
我正在查看文档,但没有立即看到ReadOnlyList<T>
。
发布于 2010-04-16 07:39:15
如果您想要一个不可变的项目列表,您可以通过调用列表上的AsReadOnly()方法返回一个ReadOnlyCollection:
public IList<Foo> ImmutableViewOfInventory()
{
List<Foo> inventory = new List<Foo>();
inventory.Add(new Foo());
return inventory.AsReadOnly();
}
这将返回一个强类型且不可修改的IList
实现。
但是,它不会阻止对列表中包含的任何项进行更改(除非它们是值类型)。为此,必须克隆每一项(如果它们本身包含其他对象,则进行深度克隆),并将其添加到从ImmutableViewOfInventory
方法返回的新只读列表中。不幸的是,您将不得不自己实现这一点。
发布于 2010-04-16 07:21:58
你有没有看过ReadOnlyCollection
发布于 2010-04-16 07:22:08
新建ReadOnlyCollection(清单);
https://stackoverflow.com/questions/2649626
复制相似问题