假设我们有一个非常长的字符串,比max_int还要大。 string str="this should contain a long string"; 如果我想访问 str[100000000000],应该怎么做? 当我尝试使用非 int 类型的索引时,会出现以下错误: “string.this[int]”的最佳重载方法具有一些无效参数
单个对象的最大大小在.NET 4.5之前为2GB,因此您永远无法拥有如此大的字符串,因此尝试使用这么大的索引没有任何意义。 在.NET 4.5中,您可以增加该限制。引用自MSDN:“默认情况下,在64位Windows操作系统上运行64位托管应用程序时,您最多只能创建2 GB的对象。但是,在.NET Framework 4.5中,您可以增加此限制。有关更多信息,请参见gcAllowVeryLargeObjects元素。”然而,大多数容器仍然基于int进行接口定义,即使对于数组也是如此,这没有帮助...“数组中的最大元素数为UInt32MaxValue。”...它是4294967295,仍然小于您提出的100000000000。 你真的需要那么多连续的内存吗?为什么不将数据分成较小的块?
你需要实现一个支持大范围索引的自定义数组。所有正常的 .Net 类型(如 String、Array、List)仅支持整数索引。这部分是由于最大连续分配大小的限制 - 因此,您的自定义类需要将数据分块以支持这些索引。