我遇到了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查找失败?
我错过了什么吗?
答案 0 :(得分:-1)
没有任何意义,除非这个故事有更多内容。例如,如果有其他线程更改值,或者存储其他不兼容的类型等,
您可以将ArrayList更改为List吗?如果它是ArrayList中的错误,那可以解决问题。
但是我建议您在代码中创建临时黑客,以便始终比较原始列表中的所有项目与返回数组中的所有项目。如果两个集合都不匹配100%,则将两者都转储到日志文件中(转储值和一些元数据,例如总元素,元素类型等)