Search code examples
.netdelphioxygene

How set dynamic array size in Oxygene (SetLength doesn't work)


What is the equivalent of SetLength using Oxygene? I'm trying to size an integer array.

var listIndexes: array of integer;
begin
     setLength(listIndexes,5);  // doesn't work
end;

Solution

  • Bill, the function Setlength does not exist in Delphi-Prism (you can use the namespace ShineOn.Rtl from ShineOn wich have a partial implementation of the Setlength function).

    In delphi prism you can try this

    type
    IntegerArray = array of integer;
    
    var listIndexes: IntegerArray;
    listIndexes:=New IntegerArray(5);
    

    or

     var listIndexes: Array of Integer;
     listIndexes:=New Integer[5];
    

    UPDATE

    Also, you can write your own SetLength

    method SetLength(var myArray: Array of Integer; NewSize: Integer);
    var 
    ActualLength: Integer;
    begin
      var DummyArray: &Array := &Array.CreateInstance(typeOf(Integer), NewSize);
      if assigned(myArray) then
      begin
        ActualLength:= iif(myArray.Length > NewSize, NewSize, myArray.Length);
        &Array.Copy(myArray, DummyArray, ActualLength);
      end;
      myArray := array of integer(DummyArray);
    end;