首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#:列表对象的不可变视图?

C#:列表对象的不可变视图?
EN

Stack Overflow用户
提问于 2010-04-16 07:17:49
回答 3查看 8.6K关注 0票数 20

我有一个列表,并且我想提供对包含其内容的集合的只读访问。我该怎么做呢?

类似于:

代码语言:javascript
复制
public ICollection<Foo> ImmutableViewOfInventory() {

    IList<Foo> inventory = new List<Foo>();

    inventory.add(new Foo());

    return inventory.ImmutableView();

}

此外,一个不可变的IEnumerable也可以。

更新:我现在意识到列表的不可变视图实际上会更好。(保留列表排序语义。)

这不会给我提供列表行为,对吧:

代码语言:javascript
复制
    public ReadOnlyCollection<PickUp> InventoryItems()
    {
        return new ReadOnlyCollection<PickUp>(inventory);
    }

我正在查看文档,但没有立即看到ReadOnlyList<T>

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-16 07:39:15

如果您想要一个不可变的项目列表,您可以通过调用列表上的AsReadOnly()方法返回一个ReadOnlyCollection

代码语言:javascript
复制
public IList<Foo> ImmutableViewOfInventory() 
{
    List<Foo> inventory = new List<Foo>();
    inventory.Add(new Foo());
    return inventory.AsReadOnly();
}

这将返回一个强类型且不可修改的IList实现。

但是,它不会阻止对列表中包含的任何项进行更改(除非它们是值类型)。为此,必须克隆每一项(如果它们本身包含其他对象,则进行深度克隆),并将其添加到从ImmutableViewOfInventory方法返回的新只读列表中。不幸的是,您将不得不自己实现这一点。

票数 25
EN

Stack Overflow用户

发布于 2010-04-16 07:21:58

你有没有看过ReadOnlyCollection

http://msdn.microsoft.com/en-us/library/ms132474.aspx

票数 3
EN

Stack Overflow用户

发布于 2010-04-16 07:22:08

新建ReadOnlyCollection(清单);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2649626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档