考虑以下:
long size = int.MaxValue;
long[] huge = new long[size]; // throws OutOfMemoryException
long[] huge = new long[size + 1]; // throws OverflowException
我知道单个对象的大小有 2GB 的限制,这解释了第一个异常,但是为什么一旦元素数量超过 32 位,我会得到不同的异常?
(如果这很重要,我使用的是 64 位计算机)。
编辑:我还可以定义和使用一个可以毫无问题地接受 a 的索引器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