C# 将ArrayList复制到数组时出现问题。元素没有被保留

C# 将ArrayList复制到数组时出现问题。元素没有被保留,c#,.net,arrays,collections,arraylist,C#,.net,Arrays,Collections,Arraylist,我在ArrayList.ToArray中遇到了一个问题,当我将ArrayList转换为数组时,它似乎正在重新分配存储在ArrayList中的一些引用。我有一个引用的ArrayList,这些引用用作哈希表中的键。在某一点上,使用以下行将ArrayList复制到阵列: destination.Items = newItems.ToArray(typeof(MyItem)) as MyItem[]; 我在目标数组中看到它引用的方式应该从源ArrayList中保留下来,但并不总是这样。在某些情况下,当

我在ArrayList.ToArray中遇到了一个问题,当我将ArrayList转换为数组时,它似乎正在重新分配存储在ArrayList中的一些引用。我有一个引用的ArrayList,这些引用用作哈希表中的键。在某一点上,使用以下行将ArrayList复制到阵列:

destination.Items = newItems.ToArray(typeof(MyItem)) as MyItem[];
我在目标数组中看到它引用的方式应该从源ArrayList中保留下来,但并不总是这样。在某些情况下,当我使用目标数组中的引用在哈希表中进行查找时,它会失败

但是,如果我使用下面的代码显式地将项复制到源数组中,则查找会100%成功

MyItem[] Items = destination.Items;
Array.Resize(ref Items, newItems.Count);   //First I resize to receive all the elements

int i = 0;
foreach (MyItem newItem in newItems)
{
    Items[i++] = newItem;
}
例如,ArrayList.ToArray重新分配是否有可能导致重新创建元素,从而导致哈希表查找失败


我遗漏了什么吗?

这没有意义,除非这个故事有更多内容。例如,如果有其他线程正在更改值,或者您正在存储其他不兼容的类型,等等

您能将ArrayList更改为List吗?如果这是ArrayList中的一个bug,那么可以解决这个问题


但是,我建议您在代码中创建一个临时hack,以便始终比较原始列表中的所有项与返回数组中的所有项。如果两个集合都不匹配100%,则将它们都转储到日志文件中转储值和一些元数据,如元素总数、元素类型等

调整数组大小对我来说不太合适。我更喜欢使用列表…您使用的是哪个.net framework版本?同时发布你的哈希表代码,关键是什么?@MUG4N同意。但是我没有这个选项,数组是library@SriramSakthivel,我用的是.NET4.5。至于哈希表代码,我只是使用System.Collections.HashTable,其中一个MyItem实例作为键。@TomKoberle很好,您的MyItem是可变的吗?我的意思是,在将其添加到哈希表之后,是否会更改其字段?