2010-08-02 35 views
1

我的要求:List,SortedList,Dictionary按鍵存儲對象並序列化它們?

  • 我需要存儲一個類的內部對象的集合,
  • 對象必須是他們的主要訪問(這將是唯一的字符串),搜索/刪除/替換必須全力以赴這

    MyClass somethingNew = new MyClass(); 
    // set someproperties on somethingNew  
    somethingNew.Id = "FooBar";  
    // theOtherObject already contains an object with the key "FooBar"  
    theOtherObject.Members[somethingNew.Id] = somethingNew; 
    
  • 當新對象未插入排序應該發生,

  • 屬性(集合)必須是可序列化到XML我們DataContractSerializer。

那麼,如何選擇會員屬性? 我想,列表和排序列表是出了問題,所以我將使用通用

Dictionary<string, MyClass>. 

這是一個正確的決定?它支持序列化嗎?

回答

2

Dictionary<string, MyClass>在這種情況下是正確的選項。

是的,它是可串行化的。

3

您可能要考慮的另一個課程KeyedCollection<TKey,TItem>。它也是可序列化的。

KeyedCollection類是基於IList通用接口的集合與基於IDictionary通用接口的集合之間的混合。像基於IList通用接口的集合一樣,KeyedCollection是項目的索引列表。與基於IDictionary通用接口的集合類似,KeyedCollection具有與每個元素關聯的鍵。 *

*參考上述鏈接的MSDN文檔。

編輯: 有一點要注意的是,KeyedCollection<TKey,TItem>是一個抽象類,你將需要派生該類,EX的實例)MyClassCollection,然後才能開始使用它。

+0

-1 KeyedCollection 是一個抽象類,不能直接實例化。它也適用於Key直接嵌入到Value對象中的情況(在這種情況下,它不是真的)。 – 2010-08-02 17:15:46

+0

是的,我知道這是一個抽象類。但他正在根據他的「MyClass」的'somethingNew.Id'進行查找。如果這個集合在整個應用程序的許多地方使用,那麼創建一個專用的集合類「MyClassCollection」來處理對這些對象的集合的訪問沒有任何問題。 – 2010-08-02 17:25:30

+0

你說得對。我錯誤地閱讀了代碼。您可能想要更新您的答案,以包含OP必須創建從KeyedCollection 派生的自定義集合類型的事實。 – 2010-08-02 17:42:26

相關問題