DELPHI 2010
Comment modifier la valeur de la valeur
4 Réponses :
A := List[10]; A.a := 1; list[10] := A; You don't have to do this with objects because they're reference types, (accessed through a pointer which the compiler manages internally to keep it out of your hair,) but records are value types so it doesn't work that way.
C'est une façon simple et forte. Mais lorsque la taille de l'enregistrement est très énorme, la pile débordne en raison de la variable locale A et si cela fonctionne dans une boucle ou une boucle, c'est très lent.
Vous avez frappé sur un accroc avec l'utilisation des enregistrements.
Considérez ce code: P>
List[10] := A; <- writing a whole record is OK List[10].a:=1; <- List[10] returns a temporary record, pointless assignment P:=@List[10]; <- List[10] returns a temporary record, its address is pointless
Cependant, les articles de propriété sont en lecture-écriture et je pense que Delphi pourrait comprendre que les articles [1] .a: = 123 MEENS MEENS [1]: = TTYPE (123, OLDVAL2, OLDVAL3)
Mais ce n'est pas ... la partie importante n'est pas ce que le compilateur pourrait i> faire, mais ce que fait en fait i>.
@Astronavigator: Oui, la propriété est R / W, mais vous n'accédez pas directement au terrain directement. Cela vient de retourner une copie du champ. Vérifiez la réponse de Mason pour contourner cela.
Si vous souhaitez stocker des enregistrements, des matrices dynamiques sont plus adaptées à la manipulation: Si vous devez ajouter des méthodes pour manipuler ces données, vous pouvez stocker ce tableau comme champ de une classe et ajoutez vos méthodes à cette classe. P> p>
Si vous avez besoin de manipuler des objets sous cette forme, il est préférable d'utiliser TOBEJECTLIST au lieu de TLIST et de définir la structure en classe plutôt qu'un enregistrement:
type TTest = class a,b,c:Integer end;
var List:TObjectList<TTest>;
A:TTest; // A is an object so there's no need for a pointer
....
....
List.Add(TTest.Create);
List.Last.a := 1;
A:=List.Last;
erreur ridicule. Et personne ne s'en soucie de l'enseigner. C'est une honte à quoi ils font les documents.