Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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#_C# 4.0 - Fatal编程技术网

C# 分类字典复制键?

C# 分类字典复制键?,c#,c#-4.0,C#,C# 4.0,Okai,我有以下方法: public void Insert(SortedDictionary<byte[], uint> recs) { SortedDictionary<byte[], uint> records = new SortedDictionary(recs, myComparer); } (这只是一个小飞贼.);也就是说,如果“recs”按对象引用进行比较,myComparer比较实际字节,则会发生冲突 检查比较器代码: 分类词典(的)中的每个

Okai,我有以下方法:

public void Insert(SortedDictionary<byte[], uint> recs)
{
    SortedDictionary<byte[], uint> records = new SortedDictionary(recs, myComparer);
}

(这只是一个小飞贼.);也就是说,如果“recs”按对象引用进行比较,myComparer比较实际字节,则会发生冲突

检查比较器代码:

分类词典(的)中的每个键 TKey,TValue)必须是唯一的,根据 到指定的比较器;因此,源字典中的每个键也必须是 根据指定的比较器是唯一的

使用新的比较器,两个具有正常
字节[]
comparison的不同键可能会相等


这就是msdn

在调用方法中必须使用相同的
Dictionary
对象。我想你的代码是这样的:

 SortedDictionary<byte[], uint> dic = new SortedDictionary<byte[], uint>();
 foreach (var thing in things)
 {
     dic.Clear();
     Populate(dic);
     Insert(dic);
 }
SortedDictionary<byte[], uint> dic = new SortedDictionary<byte[], uint>();
foreach (var thing in things)
{
    dic = new SortedDictionary<byte[], uint>();
    Populate(dic);
    Insert(dic);
}
SortedDictionary dic=新的SortedDictionary();
foreach(事物中的事物)
{
dic.Clear();
填充(dic);
插入(dic);
}
应该是这样的:

 SortedDictionary<byte[], uint> dic = new SortedDictionary<byte[], uint>();
 foreach (var thing in things)
 {
     dic.Clear();
     Populate(dic);
     Insert(dic);
 }
SortedDictionary<byte[], uint> dic = new SortedDictionary<byte[], uint>();
foreach (var thing in things)
{
    dic = new SortedDictionary<byte[], uint>();
    Populate(dic);
    Insert(dic);
}
SortedDictionary dic=新的SortedDictionary();
foreach(事物中的事物)
{
dic=新的分类词典();
填充(dic);
插入(dic);
}

你能发布调用你的
Insert
方法的代码吗?

返回类型不是
SortedDictionary
而不是
SortedDictionary
?你应该发布你的比较器的代码,否则我们帮不了你这么多…我为比较器添加了一个代码示例。你的比较器看起来还可以。现在的问题是,在sortedDictionary中作为参数使用的比较器是什么?因为您的比较器发现一些键相等,而另一个键不相等…我没有访问调用范围的权限。有趣的事实是,但我仍然不太明白为什么会发生这种情况。比较器会以某种方式改变键吗?不会,新字典会用比较器对键进行排序,但是如果它发现两个键与比较器相等,它会抱怨。当您尝试在字典中多次添加相同的键时,情况也是如此(在这种情况下,相同的键由默认比较器定义,在您的情况下由自定义比较器定义)。在原始字典中搜索键
a
&
b
其中
a!=b
内部.ByteConverter.ToString(a).CompareTo(内部.ByteConverter.ToString(b))==0