Ich bin zu dumm dafür. Wie ist das gemeint? Doku ist natürlich keine vorhanden.
Delphi-Quellcode:
var
firstArray, secondArray: TArray<Integer>;
begin
firstArray := [5,4,3,2,1];
SetLength(secondArray, Length(firstArray));
TArray.Copy(firstArray, secondArray, Length(firstArray));
Ich finde, das ist richtig. Tatsächlich wirft er mir aber eine
EArgumentOutOfRangeException
-
Exception um die Ohren denn in
System.Generics.Collections.pas steht:
Delphi-Quellcode:
class procedure TArray.CheckArrays(Source, Destination: Pointer; SourceIndex, SourceLength, DestIndex, DestLength, Count: NativeInt);
begin
if (SourceIndex < 0) or (DestIndex < 0) or (SourceIndex >= SourceLength) or (DestIndex >= DestLength) or
(SourceIndex + Count >= SourceLength) or (DestIndex + Count >= DestLength) then
raise EArgumentOutOfRangeException.CreateRes(@SArgumentOutOfRange);
if Source = Destination then
raise EArgumentException.CreateRes(@sSameArrays);
end;
Warum ist es denn ungültig wenn
SourceIndex +
Count >= SourceLength sind? Das
muss doch so sein. Wenn ich ein Array mit fünf Elementen kopieren will- Dann ist doch Index = 0, Count = 5 und Length = 5.
Ich finde, er müsste auf ">" prüfen und
nicht ">="
Wo ist mein Denkfehler?