首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >返回List<T>的只读包装器的哪种方式更可取?

返回List<T>的只读包装器的哪种方式更可取?
EN

Stack Overflow用户
提问于 2012-10-02 09:26:49
回答 1查看 1.6K关注 0票数 10

比方说,我们有一个带有私有列表的泛型类。我们至少可以通过两种方式让它返回这个列表的只读包装器:

代码语言:javascript
运行
复制
public class Test<T>
{
    public List<T> list = new List<T>();

    public IEnumerable<T> Values1
    {
        get
        {
            foreach (T i in list)
                yield return i;
        }
    }

    public IEnumerable<T> Values2
    {
        get
        {
            return list.AsReadOnly();
        }
    }
}

Values1Values2都会反映基础集合中的任何更改,并阻止其通过自身进行修改。

哪种方式更可取?你应该意识到什么?或者还有其他更好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-02 09:30:26

如果输出只需要一个IEnumerable<T>,我更倾向于:

代码语言:javascript
运行
复制
public IEnumerable<T> Values
{
    return this.list.AsReadOnly();
}

由于ReadOnlyCollection实现了IEnumerable<T>,这为您的对象提供了一个安全的包装器,同时仍然是灵活和有效的,并防止强制转换能够设置值。

如果您决定要在结果中做一些不同的事情,您可以随时更改内部实现。

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

https://stackoverflow.com/questions/12683352

复制
相关文章

相似问题

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