Domanda

  ShowMessage(TRttiContext.Create.GetType(TStringList)
    .GetProperty('Strings').ToString);

Sopra codice non riesce come .GetProperty ritorna nil sulle proprietà come "Stringhe", "oggetti", "valori" (quelli con indicizzatori). Presumo che ciò è una limitazione nota e la domanda è se c'è qualche modo per accedere a tali proprietà indicizzate (preferibilmente senza cadere indietro ai vecchi RTTI utils).

È stato utile?

Soluzione

proprietà

indicizzate non hanno RTTI, ma i campi sottostanti fanno. Così si può accedere direttamente attraverso TStringList.FList RTTI. Attenzione, però, in quanto si tratta di puntatori prime, e assicurarsi che non si va al di là della proprietà Count. Si possono fare cose simili con altre classi.

Altri suggerimenti

Ci sono lacune nella RTTI. Le proprietà indicizzate sono uno.

Ma quando non si ottiene il nome della proprietà, perché si tenta di accedervi? ;-) Quando sai c'è una tale proprietà si può provare invece un cast.

Non si ottiene RTTI per i parametri del metodo del tip

procedure MyProc(const AParam: array of AType)

anche.

che nessuno sappia più elementi erano non possiamo ottenere RTTI?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top