2010-09-21 3 views
8

Vom MSDN:Warum Array.Copy Unterstützung Lange Argumente

Parameter source

Das Array, das die Daten auf Kopie enthält. destinationArray

Das Array, das die Daten empfängt. Länge

Eine 64-Bit-Ganzzahl, die die Anzahl der zu kopierenden Elemente darstellt. Die ganze Zahl muss zwischen Null und Int32.MaxValue, inklusive

Da der zulässige Wertebereich ist 0-Int32.MaxValue, was die Motivation ist diese Signatur für das Hinzufügen? Es existierte nicht in .Net 1.0 und wurde nur in .Net 1.1 hinzugefügt. Meine einzige Vermutung ist, sich auf 64-Bit-Framework-Implementierungen vorzubereiten.

+0

oder ein Legacy-Hangup - nie vergessen, sie sind auch Sterbliche bei MS. –

Antwort

3

Seltsamerweise hat ein Array auch Überladungen für GetItem, die entweder ein Int32 und ein Int64 nehmen. In der Praxis können Sie jedoch in der aktuellen Implementierung des .NET-Frameworks kein einziges Objekt größer als 2 Gigabyte haben, sodass Sie kein Array erstellen können, das solche großen Indizes zulässt.

Ich denke, wenn diese Einschränkung später aufgehoben würde, würde es bedeuten, dass sie die Schnittstelle nicht ändern müssen.

+0

Das lässt mich fragen, ob man ein Array mit einer unteren Grenze definieren könnte> int.MaxValue ... – dtb

+0

@ dtb: Keine Verwendung von 'CreateInstance', weil der length-Parameter ein int ist. Wenn Sie versuchen, etwas wie 'Array my1DIntArray = Array.CreateInstance (typeof (Int64), neues int [] {3}, neues int [] {Int32.MaxValue - 1});' zu machen, erhalten Sie eine'ArgumentOutOfRangeException' mit die Nachricht 'Array my1DIntArray = Array.CreateInstance (typeof (Int64), neuer int [] {3}, neuer int [] {Int32.MaxValue - 1});' – Brian

Verwandte Themen