2010-09-21 8 views
8

Dal MSDN:Perché supporto Array.Copy Argomenti lunghi

Parametri sourceArray

Array che contiene i dati per copia. destinationArray

La matrice che riceve i dati. lunghezza

Un numero intero a 64 bit che rappresenta il numero di elementi da copiare . Il numero intero deve essere compreso tra zero e Int32.MaxValue, inclusiva

dato che l'intervallo consentito di valori è 0-Int32.MaxValue, qual è la motivazione per l'aggiunta di questa firma? Non esisteva in .Net 1.0 ed è stato aggiunto solo in .Net 1.1. La mia unica ipotesi è prepararsi per implementazioni Framework a 64 bit.

+0

o un hangup legacy - non dimenticare mai che sono anche mortali alla SM. –

risposta

3

Curiosamente un array ha anche sovraccarichi per GetItem che richiedono un Int32 e un Int64. Ma in pratica non è possibile avere un singolo oggetto più grande di 2 gigabyte nell'implementazione corrente del framework .NET, quindi non è possibile creare un array che consenta indici così grandi.

Immagino che se questa restrizione venisse revocata in un secondo momento, significherebbe che non è necessario modificare l'interfaccia.

+0

Mi chiedo quindi se si possa definire un array con un limite inferiore> int.MaxValue ... – dtb

+0

@dtb: Non si usa 'CreateInstance' perché il parametro length è un int. Se provi a fare qualcosa come 'Array my1DIntArray = Array.CreateInstance (typeof (Int64), new int [] {3}, new int [] {Int32.MaxValue - 1});', ottieni un 'ArgumentOutOfRangeException' con il messaggio, 'Array my1DIntArray = Array.CreateInstance (typeof (Int64), new int [] {3}, new int [] {Int32.MaxValue - 1});' – Brian

Problemi correlati