【问题标题】:Read-only list of strings字符串的只读列表
【发布时间】:2009-07-06 21:09:54
【问题描述】:

用这种方法来保存字符串的只读列表是否很好,例如,ADO.NET中的字段列表。

var list = new System.Collections.ObjectModel.ReadOnlyCollection<string>(
           new List<string>(4) { "type", "currency", "date", "amount" });

或者这是一个多余的解决方案?

【问题讨论】:

    标签: c# .net list collections readonly


    【解决方案1】:

    如果可能,更喜欢静态类型检查。 IEnumerable&lt;string&gt; 是只读的。

    IEnumerable<string> list = new List<string> { "type", "currency", "date", "amount" };
    

    后续代码不能修改列表,错误会在编译时被捕获——除非你使用反射,但反射也可以用来绕过运行时检查。

    【讨论】:

    • 不,不要使用它,因为后续代码可以简单地转换回List&lt;string&gt;;不需要反射。
    • @KevinBrock 即使需要反射,绕过也是零努力,请参阅:stackoverflow.com/a/1232332/27423 - 尝试“阻止”展开“只读”包装器比无用更糟糕。它在不增加任何实际价值的情况下增加了复杂性(可能还有运行时成本)。通过静态类型系统记录 API 的正确用法 - 其他任何内容都没有意义。
    【解决方案2】:

    取决于你的职位。 ReadOnlyCollection 当您有一个内部可修改列表需要提供给其他一些不允许更改列表的代码时效果很好。对于简单的代码,使用ReadOnlyCollection 可能是矫枉过正。如果代码很大,并且其他程序员(或者你,在路上)可能会不小心尝试修改列表,那么它可能是值得的。

    简而言之:不要习惯性地使用ReadOnlyCollection,在有意义的时候使用它。

    【讨论】:

      【解决方案3】:

      回到 .NET 2.0,List 类有一个 AsReadOnly() 方法。当泛型出现时,List&lt;T&gt; 也得到了它。这是MSDN reference page

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-23
        • 1970-01-01
        • 1970-01-01
        • 2014-06-02
        • 2010-09-21
        • 2022-01-15
        相关资源
        最近更新 更多