2010-08-02 37 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

相关问题