10
votes

Comment puis-je initialiser un enregistrement déclaré comme une variable locale?

J'utilise un enregistrement composé de cordes, de booléens, d'entiers, de devises et de tableaux d'autres enregistrements dans une méthode d'une classe. Je voudrais initialiser récursivement tous les champs d'un type primitif à vide / faux / zéro. Delphi ne semble pas faire cela par défaut. Existe-t-il un moyen simple d'accomplir cela qui n'implique pas d'accéder à chaque champ par nom et le réglage manuellement?


3 commentaires

Notez que Delphi initialise des types gérés par la vie (chaînes, matrices dynamiques, interfaces).


Dans Delphi-2009 et plus tard, un enregistrement peut être initialisé par foo: = par défaut (TFOO); . Voir La réponse de David à la question Comment bien libérer des enregistrements contenant différents types à Delphi à la fois? .


Voir aussi: quelles variables sont initialisées lors de Delphi?


3 Réponses :


13
votes

Vous pouvez utiliser l'un ou l'autre des em> des constructions suivantes (où FOO est un enregistrement).

FillChar(Foo, SizeOf(Foo), 0); 

ZeroMemory(@Foo, SizeOf(Foo));


3 commentaires

Ou le même code avec (probablement) une meilleure lisibilité: Zeromemory (@foo, Tailleof (FOO));


@ IM0RTALITY: J'ai mis à jour la réponse pour inclure votre solution de zéromémorie.


Notez que la zéromémorique est une enveloppe pour Fillchar dans certaines versions de Delphi (D6 et 7 au moins).




1
votes

Eh bien, vous pouvez appliquer un truc juridique simple xxx


0 commentaires