次のことを考慮してください。
long size = int.MaxValue;
long[] huge = new long[size]; // throws OutOfMemoryException
long[] huge = new long[size + 1]; // throws OverflowException
単一のオブジェクトのサイズに2GBの制限があることは知っていますが、これが最初の例外を説明していますが、要素の数が32ビットを超えると別の例外が発生するのはなぜですか?
(重要な場合は、64ビットコンピューターを使用しています)。
long
編集:問題なく受け入れるインデクサーを定義して使用することもできます:
internal sealed class MyClass
{
public object this[long x]
{
get
{
Console.WriteLine("{0}", x);
return null;
}
}
}
...
long size = int.MaxValue;
MyClass asdf = new MyClass();
object o = asdf[size * 50]; // outputs 107374182350