Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表、SortedList、Dictionary按键存储对象并序列化它们?_C#_.net_.net 4.0 - Fatal编程技术网

C# 列表、SortedList、Dictionary按键存储对象并序列化它们?

C# 列表、SortedList、Dictionary按键存储对象并序列化它们?,c#,.net,.net-4.0,C#,.net,.net 4.0,我的要求: 我需要在类中存储一组对象, 对象必须可以通过其键访问,该键将是唯一的字符串,搜索/删除/替换必须像这样工作 MyClass somethingNew = new MyClass(); // set someproperties on somethingNew somethingNew.Id = "FooBar"; // theOtherObject already contains an object with the key "FooBar" theOthe

我的要求:

我需要在类中存储一组对象, 对象必须可以通过其键访问,该键将是唯一的字符串,搜索/删除/替换必须像这样工作

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;
插入新对象时,不应进行排序

属性集合必须可以使用DataContractSerializer序列化为XML。 那么,为成员属性选择什么呢? 我想List和SortedList是不可能的,所以我将使用generic

Dictionary<string, MyClass>.
这是正确的决定吗?它支持序列化吗?

在这种情况下,字典是正确的选项

是的,它是可序列化的。

在这种情况下,字典是正确的选项


是的,它是可序列化的。

您可能要考虑的另一个类。它也是可序列化的

KeyedCollection类是基于IList通用接口的集合和基于IDictionary通用接口的集合的混合体。与基于IList通用接口的集合一样,KeyedCollection是一个索引项列表。与基于IDictionary泛型接口的集合类似,KeyedCollection具有与每个元素关联的键*

*参考上述链接中的MSDN文档

编辑:
需要注意的是KEYEDE集合是一个抽象类,在您开始使用它之前,您需要导出该类的前一个实例,即

您可能要考虑的另一个类。它也是可序列化的

KeyedCollection类是基于IList通用接口的集合和基于IDictionary通用接口的集合的混合体。与基于IList通用接口的集合一样,KeyedCollection是一个索引项列表。与基于IDictionary泛型接口的集合类似,KeyedCollection具有与每个元素关联的键*

*参考上述链接中的MSDN文档

编辑:
需要注意的一点是KeyedCollection是一个抽象类,在开始使用它之前,您需要派生该类的一个实例,例如MyClassCollection。

-1 KeyedCollection是一个抽象类,不能直接实例化。它也适用于键直接嵌入值对象的特定情况,在这种情况下,值对象不是真的。是的,我知道它是一个抽象类。但他是根据他班上的新身份进行查找的。如果这个集合在整个应用程序中的许多地方都使用,那么创建一个专用的集合类MyClassCollection来处理对这些对象集合的访问就没有问题了。我读错代码了。您可能希望更新您的答案,以包含这样一个事实,即OP必须创建一个从KeyedCollection派生的自定义集合类型。@Justin Niessner-谢谢,我更新了我的答案以反映这一点。很高兴指出这个类。虽然我不会在本例中使用它,但它在许多其他情况下确实非常有用。Upvoting.-1 KeyedCollection是一个抽象类,不能直接实例化。它也适用于键直接嵌入值对象的特定情况,在这种情况下,值对象不是真的。是的,我知道它是一个抽象类。但他是根据他班上的新身份进行查找的。如果这个集合在整个应用程序中的许多地方都使用,那么创建一个专用的集合类MyClassCollection来处理对这些对象集合的访问就没有问题了。我读错代码了。您可能希望更新您的答案,以包含这样一个事实,即OP必须创建一个从KeyedCollection派生的自定义集合类型。@Justin Niessner-谢谢,我更新了我的答案以反映这一点。很高兴指出这个类。虽然我不会在本例中使用它,但它在许多其他情况下确实非常有用。向上投票。