如何获取其索引大于max_int的数组元素

时间:2012-10-18 02:19:35

标签: c# arrays

假设我们有一个字符串,其长度非常大,让我们说比max_int更大。

string str="this should contain a long string";

如果我想要转到str[100000000000]

我该怎么做?

当我尝试输入其类型不是int的索引时,我收到以下错误:

  

'string.this [int]'的最佳重载方法匹配有一些无效的参数

4 个答案:

答案 0 :(得分:2)

你做不到。我不相信你可以拥有一个超过2 ^ 32字节的对象,所以你真的不会碰到这个。

根据this post,最大CLR对象大小为2GB,这证实了我的陈述。

答案 1 :(得分:2)

单个对象的最大大小在.NET 4.5之前是2GB,所以你永远不会有一个很大的字符串,所以试图使用这么大的索引没有任何意义。


在.NET 4.5中,您可以增加该限制。引自MSDN

“默认情况下,在64位Windows操作系统上运行64位托管应用程序时,可以创建不超过2千兆字节(GB)的对象。但是,在.NET Framework中4.5,您可以增加此限制。有关详细信息,请参阅gcAllowVeryLargeObjects元素。“

但是,大多数容器仍然具有基于int的接口,甚至对于数组won't help ......

“数组中的最大元素数为UInt32MaxValue。”

...这是4,294,967,295,仍然小于你提议的100,000,000,000。


你真的需要那么多连续记忆吗?为什么不将数据拆分成较小的块?

答案 2 :(得分:1)

您需要实现支持大量索引的自定义数组。

所有正常的.Net类型(如String,Array,List)仅支持用于索引的整数。这部分是由于对最大连续分配大小的限制 - 因此您的自定义类需要块数据以支持此类索引。

答案 3 :(得分:1)

您可以使用Array.GetValue获取大于int的数组索引。