J'utilise un enregistrement composé de chaînes, 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 ceci qui n'implique pas d'accéder à chaque champ par son nom et de le configurer manuellement?Comment initialiser un enregistrement déclaré en tant que variable locale?
Répondre
Vous pouvez utiliser l'un des des constructions suivantes (où Foo est un enregistrement).
FillChar(Foo, SizeOf(Foo), 0);
ZeroMemory(@Foo, SizeOf(Foo));
d'un poste de Allen Bauer
Tout en regardant les utilisations les plus courantes pour FillChar afin de déterminer si la plupart des gens utilisent FillChar pour effectivement remplir la mémoire de caractère données ou simplement utiliser pour initialiser mémoire avec une certaine valeur d'octet, nous trouvé que c'était le dernier cas que a dominé son utilisation plutôt que le précédent. Avec cela, nous avons décidé de garder FillChar byte-centric.
Ou même code avec (probablement) mieux lisibilité: ZeroMemory (@Foo, SizeOf (Foo)); – Im0rtality
@ Im0rtality: J'ai mis à jour la réponse pour inclure votre solution ZeroMemory. –
Notez que ZeroMemory est un wrapper pour FillChar dans * certaines * versions de Delphi (d6 et 7 au moins). –
- 1. Comment initialiser NSString en tant que texte avec des guillemets
- 2. Enregistrement de FileSystemObject en tant que UTF
- 3. Enregistrement d'un projet en tant que .ipa
- 4. Enregistrement d'inkpresenter en tant que png
- 5. Django retourne un seul enregistrement en tant que JSON
- 6. nom du serveur en tant que variable
- 7. Définition d'une variable XSLT en tant que variable JavaScript?
- 8. passer une variable en tant que tableau
- 9. JSON montrant variable en tant que texte
- 10. Initialiser déjà déclaré tableau de caractères en C++
- 11. Initialiser un tableau de chaînes dans un appel de méthode en tant que paramètre en C#
- 12. Comment initialiser un vecteur de structures contenant des vecteurs en tant que membres?
- 13. Est-ce que la variable locale `super`?
- 14. comment affecter une valeur de variable en tant que nom de variable dans un hachage?
- 15. Comment transmettre une variable de chaîne en tant que TSysCharSet
- 16. SEL en tant que propriété d'instance ou en tant que variable statique
- 17. Windows 7: Enregistrement en tant que groupe TIFF CCITT4 modifié?
- 18. Enregistrement d'un winform usercontrol en tant que serveur COM
- 19. Que signifie i_tmp2 lorsqu'il est utilisé en tant que variable?
- 20. Enregistrement de la page Web en tant que fichier MHTM
- 21. Enregistrement de graphiques d'objets Java en tant que fichier XML
- 22. comment initialiser le dictionnaire en tant que paire (clé, valeur, valeur) en C#
- 23. Initialiser une variable d'instance
- 24. Enregistrement d'une trame de données en tant que fichier binaire
- 25. Enregistrement d'un graphique en tant que fichier .jpeg
- 26. C++ Comment obtenir une référence et sauvegarder la référence en tant que variable locale dans une fonction?
- 27. variable ou champ vide déclaré
- 28. Initialiser à nouveau une variable
- 29. transformer la variable locale javascript en variable globale
- 30. Question de portée variable locale
Notez que Delphi initialise les types gérés par la durée de vie (chaînes, tableaux dynamiques, interfaces). – kludg
En Delphi-2009 et plus tard un enregistrement peut être initialisé par 'Foo: = Default (TFoo);'. Voir [la réponse de David] (http://stackoverflow.com/a/11066205/576719) à la question [Comment libérer correctement les enregistrements qui contiennent divers types dans Delphi à la fois?] (Http://stackoverflow.com/q/ 11065821/576719). –
voir aussi: [Quelles variables sont initialisées en Delphi?] (Http://stackoverflow.com/questions/861045/which-variables-are-initialized-when-in-delphi) – Ampere