Ich benutze einen Datensatz aus Strings, Booleans, Ganzzahlen, Währungen und Arrays anderer Datensätze innerhalb einer Methode einer Klasse. Ich möchte alle Felder eines primitiven Typs rekursiv auf leer/false/zero initialisieren. Delphi scheint das standardmäßig nicht zu tun. Gibt es einen einfachen Weg, um dies zu erreichen, ohne jedes Feld nach Namen zu benennen und manuell zu setzen?Wie kann ich einen Datensatz initialisieren, der als lokale Variable deklariert wurde?
Antwort
Sie können entweder der folgenden Konstrukte verwenden (wobei Foo ein Datensatz ist).
FillChar(Foo, SizeOf(Foo), 0);
ZeroMemory(@Foo, SizeOf(Foo));
Aus einem Beitrag von Allen Bauer
Während bei den häufigsten Anwendungen für FillChar suchen, um , um zu bestimmen, ob die meisten Leute FillChar zu tatsächlich nutzen Datenspeicher mit Charakter füllen oder einfach nur benutzen es zu Speicher mit einigen gegebenen Byte-Wert zu initialisieren, haben wir festgestellt, dass es der letztere Fall war, dass seinen Einsatz statt der ehemaligen dominiert. Damit haben wir uns entschieden, FillChar byte-zentrisch zu halten.
Oder der gleiche Code mit (wahrscheinlich) besser Lesbarkeit: ZeroMemory (@Foo, SizeOf (Foo)); – Im0rtality
@Imoralität: Ich habe die Antwort aktualisiert, um Ihre ZeroMemory-Lösung zu integrieren. –
Beachten Sie, dass ZeroMemory ein Wrapper für FillChar in * einigen * Versionen von Delphi ist (mindestens d6 und 7). –
- 1. Wie lokale lokale Variable in C++ initialisieren?
- 2. xsl: Wie kann ich feststellen, ob eine Variable deklariert wurde?
- 3. Kann ich eine Variable endgültig machen, nachdem sie deklariert wurde?
- 4. Variable als Float initialisieren
- 5. Kann lokale Variable nicht verwenden, bevor es deklariert wird
- 6. Eine lokale Variable kann als Ausbeute
- 7. Kann ich eine lokale Variable in einen LINQ-Ausdruck als Konstante und nicht als Abschlussreferenz aufzeichnen?
- 8. Django: Wie kann ich mehr als einen Datensatz gleichzeitig aktualisieren?
- 9. Kann eine GDB-Convenience-Variable als Array deklariert werden?
- 10. bash - Wie deklariert man eine lokale Ganzzahl?
- 11. Wie man einen Methodenparameter als enum deklariert
- 12. Wie kann ich eine Variable ändern, die im UI-Thread von einem anderen Thread deklariert wurde?
- 13. Lokale Variable wurde nicht richtig zugewiesen
- 14. Kann ich hier globale Variable anstatt statische lokale Variable verwenden?
- 15. Kann eine Variable als automatisch deklariert werden, die zu demselben Typ abgeleitet wurde?
- 16. Wie kann ich einen Annotationsprozessor erstellen, der eine lokale Variable verarbeitet?
- 17. Wie kann ich einen Datensatz in der Gridview aktivieren/deaktivieren?
- 18. Wie deklariert man lokale Funktion innerhalb der ES6-Klasse?
- 19. lokale Variable als Argument ohne Typenname
- 20. Wie kann ich eine lokale Variable in Julia
- 21. Wie kann ich einen Multi-Byte-ANSI-String initialisieren?
- 22. Wie kann ich einen Vektor in einen Datensatz konvertieren?
- 23. lokale Variable Emit und einen Wert zuweisen
- 24. Versuchen, ein Formular zu erstellen, in dem ich einen Datensatz aktualisieren kann, der durchsucht wurde
- 25. SO_NOSIGPIPE wurde nicht deklariert
- 26. Ich kann eine Variable nicht neu ausleihen, weil ich unveränderliche lokale Variable nicht als veränderbar ausleihen kann
- 27. python: Wie erfasse ich eine Variable, die in einem nicht globalen äußeren äußeren Bereich deklariert wurde?
- 28. Wie ist es vorgekommen, dass eine Variable verwendet wurde, bevor sie deklariert wurde?
- 29. Fehler "avg1, avg2, avg3, avg4" lokale Variable kann nicht in diesem Bereich deklariert werden
- 30. Wie finde ich einen letzten Datensatz für einen Datensatz in der ersten Tabelle in Mysql
Beachten Sie, dass Delphi lebensdauerverwaltete Typen (Strings, dynamische Arrays, Schnittstellen) initialisiert. – kludg
In Delphi-2009 und später kann ein Datensatz mit 'Foo: = Default (TFoo);' initialisiert werden. Siehe [Davids Antwort] (http://stackoverflow.com/a/11066205/576719) auf die Frage [Wie kann man Datensätze, die verschiedene Arten in Delphi enthalten, sofort freigeben?] (Http://stackoverflow.com/q/ 11065821/576719). –
siehe auch: [Welche Variablen werden in Delphi initialisiert?] (Http://stackoverflow.com/questions/861045/which-variables-are-initialized-when-in-delphi) – Ampere