2012-03-28 16 views
7

En mi desarrollo de Delphi, quiero pasar una "matriz de const" (que también puede contener clase) a un procedimiento, y en procedimiento buclear elementos y detectar el tipo de elemento como sigue.¿Cómo obtengo los tipos y valores de una matriz de const?

Procedure Test(const Args : array of const); 
begin 
end; 

and in my code call it with some variables 

Procedure Test(); 
begin 
    cls := TMyObject.create; 
    i := 123; 
    j := 'book'; 
    l := False; 
    Test([i,j,l, cls, 37.8]) 
end; 

¿Cómo se activan los elementos de matriz enviados y se detecta su tipo?

+0

Google es su amigo, http://blogs.embarcadero.com/abauer/2007/ 06/01/35293 – Dampsquid

+0

Por favor, especifique la versión de Delphi! –

+4

¿Cuánta diferencia hace eso sobre cuál sería una respuesta posible, @Warren? TVarRec no ha cambiado mucho a lo largo de los años. –

Respuesta

7
for I := Low(Args) to High(Args) do 
    case TVarRec(Args[I]).VType of 
    vtInteger: 
     ... 
    end; 
+0

Gracias, recibí mi respuesta, Tarvirdi –

17

Asumiendo que están utilizando Unicode Delphi (de lo contrario, hay que alterar el caso cadena):

procedure test(const args: array of const); 
var 
    i: Integer; 
begin 
    for i := low(args) to high(args) do 
    case args[i].VType of 
     vtInteger: ShowMessage(IntToStr(args[i].VInteger)); 
     vtUnicodeString: ShowMessage(string(args[i].VUnicodeString)); 
     vtBoolean: ShowMessage(BoolToStr(args[i].VBoolean, true)); 
     vtExtended: ShowMessage(FloatToStr(args[i].VExtended^)); 
     vtObject: ShowMessage(TForm(args[i].VObject).Caption); 
     // and so on 
    end; 
end; 


procedure TForm4.FormCreate(Sender: TObject); 
begin 
    test(['alpha', 5, true, Pi, Self]); 
end; 
Cuestiones relacionadas