Por que é "longo" sendo permitido como comprimento de matriz em c #?

Eu queria tentar alocar uma matriz de 4 bilhões de bytes e este é o meu código c #:

long size = 4 * 1000;
size *= 1000;
size *= 1000;
byte[] array = new byte[size];

este código falha comSystem.OverflowException na linha que contémnew. Ok, acabaLength devolveint, então o comprimento da matriz também é limitado ao queint pode armazenar.

Então, por que não há erro de compilação elong tem permissão para ser usado como o número de elementos da matriz na alocação?

questionAnswers(5)

yourAnswerToTheQuestion