2012-09-06 85 views
2

我有一個私有靜態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); 
     } 

    } 
} 
+0

除了大量不必要的換行符,我沒有看到你的代碼有什麼問題。你關心什麼? –

+2

@DStanley - 你可以編輯那些,你知道嗎? – Oded

+0

我想知道是否實現了這個權利,其次如果使用ReadOnlyCollection是返回只讀列表集合的理想方法。 –

回答

2

這取決於客戶的期望。如果你的客戶期望列表的內容可以改變,那麼(隱約)好。如果他們期望不變集合,那麼你需要一個副本。

注意List<T>不是線程安全的,首先,這是一個很大的紅色警示燈,當談到全球可變的狀態,沒有明顯的同步訪問...

(具有全局可變國家海事組織,影響可測試性等問題,等等。這樣做以不安全的方式使它更糟糕。)

+0

感謝您的警告。我想讓這個線程安全嗎? –

+0

出於興趣Jon你會使用鎖,ConcurrentBag 或其他方式使它成爲線程安全嗎? – Magrangs

+0

添加新字符串時鎖定商店: 鎖(存儲){store.Add(add); }。 – MrFox