2012-03-28 6 views
7

Nello sviluppo Delphi, Voglio passare un "array di const" (che può contenere anche una classe) ad una procedura, e nel loop di procedure sugli elementi e rilevare il tipo di elemento come muggito.Come ottengo i tipi e i valori di un array di 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; 

Come il ciclo sugli elementi di matrice inviati e rilevare il suo tipo?

+0

Google è tuo amico, http://blogs.embarcadero.com/abauer/2007/ 06/01/35293 – Dampsquid

+0

Si prega di specificare la versione delphi! –

+4

Quanta differenza fa su quale sarebbe una possibile risposta, @Warren? TVarRec non è cambiato molto nel corso degli anni. –

risposta

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

Grazie, ho avuto la mia risposta, Tarvirdi –

17

si Supponendo che si utilizza Unicode Delphi (in caso contrario, è necessario modificare il caso della stringa):

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; 
Problemi correlati