将ArrayList复制到数组时出现问题.元素未被保留

本文关键字:元素 问题 保留 复制 ArrayList 数组 | 更新日期: 2023-09-27 17:58:58

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

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查找失败的事情?

我是不是错过了什么?

将ArrayList复制到数组时出现问题.元素未被保留

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

你能把你的ArrayList改成List吗?如果这是ArrayList中的一个错误,那么这可以解决问题。

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