【问题标题】:Returning a Static Readonly List返回静态只读列表
【发布时间】:2012-09-06 13:11:43
【问题描述】:

我有一个带有私有静态 List<String> 集合的类。现在我想返回一个只读列表。这会是理想的方式吗?你会用另一种方式吗?这是正确的方法吗?

namespace Test
{
    static class Storage
    {

        private static List<string> store;

        static Storage()
        {
            store = new List<string>();
        }

        //Is it okay to have a getter in my static class to return my List Collection
        public static System.Collections.ObjectModel.ReadOnlyCollection<string>getList
        {
            get
            {
                return stores.AsReadOnly();
            }
        }

        public static void addString(string add)
        {
            store.Add(add);
        }

    }
}

【问题讨论】:

  • 除了很多不必要的换行符,我看不出你的代码有什么问题。你在担心什么?
  • @DStanley - 你可以编辑掉那些,你知道吗?
  • 我想知道我是否实现了这个权利,其次,如果使用 ReadOnlyCollection 是返回只读列表集合的理想方式。
  • @Oded - 是的,我知道 - 只是发泄个人的烦恼 :)

标签: c# list static


【解决方案1】:

这取决于客户的期望。如果您的客户期望列表的内容可以更改,那么(模糊)没关系。如果他们期望不变集合,那么您需要复制一份。

请注意,List&lt;T&gt; 从一开始就不是线程安全的,当涉及到 global 可变状态时,这是一个很大的红色警告灯,在没有明显同步的情况下访问... p>

(拥有全局可变状态是一个开始的问题,IMO,影响可测试性等。以不安全的方式这样做只会让事情变得更糟。)

【讨论】:

  • 感谢您的警告。我会让这个线程安全吗?
  • 出于兴趣,Jon 您会使用锁、ConcurrentBag 还是其他方式使其成为线程安全的?
  • 添加新字符串时锁定存储:lock(store) { store.Add(add); }.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 2020-08-23
  • 1970-01-01
  • 2022-06-15
  • 2010-10-19
相关资源
最近更新 更多