我有一个列表,我想提供对包含其内容的集合的只读访问权限.我怎样才能做到这一点?
就像是:
public ICollection<Foo> ImmutableViewOfInventory() {
IList<Foo> inventory = new List<Foo>();
inventory.add(new Foo());
return inventory.ImmutableView();
}
Run Code Online (Sandbox Code Playgroud)
另外,一个不可变的IEnumerable也没关系.
更新:我现在意识到列表的不可变视图实际上会更好.(保留列表排序语义.)
这不会给我列表行为,对:
public ReadOnlyCollection<PickUp> InventoryItems()
{
return new ReadOnlyCollection<PickUp>(inventory);
}
Run Code Online (Sandbox Code Playgroud)
我正在查看文档,但没有立即看到ReadOnlyList<T>.
adr*_*nks 24
如果您想要一个不可变的项列表,可以通过调用列表中的AsReadOnly()方法返回ReadOnlyCollection:
public IList<Foo> ImmutableViewOfInventory()
{
List<Foo> inventory = new List<Foo>();
inventory.Add(new Foo());
return inventory.AsReadOnly();
}
Run Code Online (Sandbox Code Playgroud)
这将返回IList强类型且不可修改的实现.
它并没有然而,防止更改任何包含在列表中的项目(除非它们是值类型).为此,必须克隆每个项目(如果它们本身包含其他对象,则进行深度克隆),并将其添加到从ImmutableViewOfInventory方法返回的新只读列表中.不幸的是,你必须自己实现这一点.
| 归档时间: |
|
| 查看次数: |
7919 次 |
| 最近记录: |