C#唯一的一对一映射字典
我正在编写一小段代码,将类序列化为二进制,这些类可以反序列化为对象,而不需要知道接收端的类型。类型在程序集中定义,但不必在方法调用中提供(例如,C#唯一的一对一映射字典,c#,.net,dictionary,serialization,one-to-one,C#,.net,Dictionary,Serialization,One To One,我正在编写一小段代码,将类序列化为二进制,这些类可以反序列化为对象,而不需要知道接收端的类型。类型在程序集中定义,但不必在方法调用中提供(例如,反序列化())。我想创建一个字典,它允许我从int中获取Type,并从Type中获取相应的int。在.Net中有这样做的对象吗 我目前有一个类,其中包含两个私有字典和一些方法,用于处理和验证同步字典的添加和删除。问题是,这正是我试图避免的(复制数据) 编辑:“潜在重复”中提出的解决方案基本上是我已经在做的事情。我在问是否有一个特殊的dictionary类
反序列化()
)。我想创建一个字典,它允许我从int
中获取Type
,并从Type
中获取相应的int
。在.Net中有这样做的对象吗
我目前有一个类,其中包含两个私有
字典和一些方法,用于处理和验证同步字典的添加和删除。问题是,这正是我试图避免的(复制数据)
编辑:“潜在重复”中提出的解决方案基本上是我已经在做的事情。我在问是否有一个特殊的dictionary类已经在这样做了,它允许一对一的关系,而不必复制每个键和值。使用两个私有dictionary(一个
dictionary
另一个dictionary
)创建您自己的类。创建两个方法IntToType
和TypeToInt
,它们将从各自的字典中获取数据。然后添加一个方法add(inti,键入t)
,该方法将添加到两个字典中。由于这是添加到其中的唯一方法(因为它们是私有的),因此它们不可能不同步。如果您希望快速访问以从int获取Type,或者从int form Type获取Type,则必须以某种方式复制数据。但若访问时间在您的情况下并不重要,那个么您可以只存储一个字典并编写这样的方法来获取指定值的键
private Dictionary<int, Type> types;
public int GetIntForType(Type t)
{
return types.FirstOrDefault(x => x.Value == t).Key;
}
私有字典类型;
公共int GetIntForType(类型t)
{
返回类型.FirstOrDefault(x=>x.Value==t).Key;
}
我在问题中指出,这已经是我所拥有的。我的问题是:是这样做的,还是有一个.Net对象可以在不复制数据的情况下做到这一点。除非你有数百万个类,否则我甚至不会担心它。int
和type
不是很多数据。一个int
和一个type
乘以,比如说100,然后再乘以2(对于这两个字典)仍然不是一个完整的数据。我关心的不是数据的大小,我确实觉得它不应该是两倍大,但我觉得这是一个引入bug的完美地方。如果没有为这个目的定义对象,我只会花更多的时间创建自己的对象,正确地检查每个插入和删除,等等…@PhilippeParé:几乎没有。您有两种方法,Add
和Remove
,确保它们是唯一可以更改基础词典的两种公共方法。我认为答案应该是:在.Net中没有这样的类。。。我知道我可以使用两本字典,我知道如何添加和删除。假设我有内存限制,在这种情况下你会怎么做?取决于使用情况,这可能足够有效。如果从int
到type
的查找是最常见的,那么从type
到int
的查找是很少的(如果相反,只需使用Dictionary
而不是
),而且项目数量很少。