假設我們有一個字符串,其長度非常大,比max_int還要大。如果我想達到str[100000000000]
。如何獲得其索引大於max_int的數組元素
我應該怎麼做?
當我試圖把它的類型不是整數,我得到以下錯誤索引:
The best overloaded method match for 'string.this[int]' has some invalid arguments
假設我們有一個字符串,其長度非常大,比max_int還要大。如果我想達到str[100000000000]
。如何獲得其索引大於max_int的數組元素
我應該怎麼做?
當我試圖把它的類型不是整數,我得到以下錯誤索引:
The best overloaded method match for 'string.this[int]' has some invalid arguments
在.NET 4.5之前,單個對象的最大大小是2GB,所以你永遠不會有一個很大的字符串,所以在嘗試使用這麼大的索引時沒有任何目的。
在.NET 4.5中,您可以增加該限制。引自MSDN:
「默認情況下,當您在64位Windows操作系統上運行64位託管應用程序時,可以創建不超過2 GB的對象。 .NET Framework 4.5中,您可以增加此限制。有關更多信息,請參閱gcAllowVeryLargeObjects元素。「
然而,大多數容器仍然具有基於int
,甚至陣列此won't help接口...
「元件的一個陣列中的最大數目是UInt32MaxValue」。
...這是仍然小於100,000,000,000你提議的4,294,967,295。
你真的需要有這麼多連續內存?爲什麼不將數據分割成更小的塊?
你不能。我不相信你可以有一個超過2^32字節的對象,所以你真的不會碰到這個。
根據this post,最大CLR對象大小爲2GB,這證實了我的說法。
您需要實現支持大範圍索引的自定義數組。
所有正常的.Net類型(如String,Array,List)僅支持用於索引的整數。這部分是由於限制了最大連續分配大小 - 所以您的自定義類需要將數據分塊以支持這些索引。
您可以使用Array.GetValue來獲取大於int
的數組索引。