Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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#唯一的一对一映射字典_C#_.net_Dictionary_Serialization_One To One - Fatal编程技术网

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
而不是
),而且项目数量很少。