将ArrayList复制到Array时出现问题。元素未被保留

时间:2014-04-17 15:56:05

标签: c# .net arrays collections arraylist

我遇到了ArrayList.ToArray的问题,当我将其转换为数组时,它似乎正在重新分配存储在ArrayList中的一些引用。我有一个引用的ArrayList,用作HashTable中的键。有一次,使用下面的行将ArrayList复制到一个数组:

destination.Items = newItems.ToArray(typeof(MyItem)) as MyItem[];

我在目标数组中看到它的引用方式应该从源ArrayList中保留,但并不总是发生。在某些情况下,当我使用目标数组中的引用在HashTable中进行查找时,它会失败。

但是,如果我使用下面的代码将项目显式复制到源数组,那么查找会在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(例如重新分配)是否有任何内容可以重新创建元素,以便HashTable查找失败?

我错过了什么吗?

1 个答案:

答案 0 :(得分:-1)

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

您可以将ArrayList更改为List吗?如果它是ArrayList中的错误,那可以解决问题。

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