将C#数组索引类型更改为Int64

时间:2017-10-08 19:10:59

标签: c# arrays

我有程序,我必须使用极端大数组。 我需要使用二维数组。

我使用了经典bool[,],但是当我在索引太大时尝试声明它时它抛出了System.OutOfMemoryException。 (使用bool[,] foo = new bool[width + bar, height])。数字widthbar都非常大,所以我想,它只是超出了索引。

如何将索引类型更改为Int64(long)?我知道我可以使用Dictionary<ulong, bool>,但它会迫使我重写我的应用程序中的几乎所有代码,我发现使用Dictionary工作更舒服,特别是当我已经拥有我需要的LINQ方法时,我不会不知道,它是否适用于二维字典。

谢谢,彼得

编辑1: 这是代码(注意:我刚刚使用sizeX = 2000000000对其进行了测试,它抛出异常):

bool[,] pole = new bool[sizeX, maxY];

问题是,我有许多具有X,Y长度和x长度的对象(Y始终为0)。我有一个数组,在每个位置上,有或者不是对象图块。

所以我得到了coord X,width&amp;高度和位置瓦片成阵列。

关键是,X可以否定,所以当我需要定位例如10个对象时,我得到最低的X(并保存例如largestNegativeX = -999)并且在定位对象之前在数组中,我添加到每个对象的X object.X += -largestNegativeX。然后我找出数组宽度(例如2000000000)并尝试声明数组。它就是抛出异常的地方。

1 个答案:

答案 0 :(得分:0)

在这里使用字典没有任何问题,因为如果您要制作自定义解决方案,那么您最有可能手动滚动。它也支持你能想到的几乎所有LINQ methods