我有一个SortedList偶尔会将其键重新分配给不同的值,我不明白这是如何发生的。
我知道键和值不同步,因为值是包含应该等于键的属性的对象。
初始化就像:
class MyObject
{
int IndexProperty { get; set; }
// ... other properties
}
SortedList<int, SortableObject> mySortedList =
new SortedList<int, MyObject>(sourceList.ToDictionary(x => x.IndexProperty , x => x)));
// sourceList is a pre-existing List<MyObject>
完成后,mySortedList如下所示:
{
2, {IndexProperty = 2}
7, {IndexProperty = 7}
22, {IndexProperty = 22}
45, {IndexProperty = 45}
}
初始化后对mySortedList的唯一操作是不时的:
AdvanceToNext()
{
if (mySortedList.Count > 0)
{
mySortedList.RemoveAt(0);
}
}
通常,没有问题,但每隔一段时间,这次检查就会出现问题:
if (mySortedList.Any(pair => pair.Key != pair.Value.IndexProperty))
; // Should never get here.
并检查mySortedList的内容表明所有值都相对于键移位了:
{
7, {IndexProperty = 2}
22, {IndexProperty = 7}
45, {IndexProperty = 22}
}
可能导致这种情况发生的原因是什么?