2010-09-21 15 views
8

Desde el MSDN:¿Por qué apoya Array.Copy largas discusiones

Parámetros sourceArray

la matriz que contiene los datos que copia. destinationArray

La matriz que recibe los datos. longitud

Un entero de 64 bits que representa el número de elementos para copiar. El número entero debe estar entre cero y Int32.MaxValue, incluido

Teniendo en cuenta que el rango de valores permitidos es 0-Int32.MaxValue, ¿cuál es la motivación para añadir esta firma? No existía en .Net 1.0 y solo se agregó en .Net 1.1. Mi única conjetura es prepararme para las implementaciones de Framework de 64 bits.

+0

o un hangout heredado - nunca olvides que son simples mortales en MS también. –

Respuesta

3

Curiosamente, una matriz también tiene sobrecargas para GetItem que toman un Int32 y un Int64. Pero en la práctica no se puede tener un solo objeto de más de 2 gigabytes en la implementación actual de .NET Framework, por lo que no se puede crear una matriz que permita índices tan grandes.

Supongo que si esta restricción se levantara más tarde significaría que no es necesario cambiar la interfaz.

+0

Eso me hace preguntar si se podría definir una matriz con un límite inferior> int.MaxValue ... – dtb

+0

@dtb: No se usa 'CreateInstance' porque el parámetro length es un int. Si intenta hacer algo como 'Array my1DIntArray = Array.CreateInstance (typeof (Int64), new int [] {3}, new int [] {Int32.MaxValue - 1});', obtiene un 'ArgumentOutOfRangeException' con el mensaje, 'Array my1DIntArray = Array.CreateInstance (typeof (Int64), new int [] {3}, new int [] {Int32.MaxValue - 1});' – Brian

Cuestiones relacionadas