2010-08-13 10 views
8

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?

+0

Beachten Sie, dass Delphi lebensdauerverwaltete Typen (Strings, dynamische Arrays, Schnittstellen) initialisiert. – kludg

+4

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). –

+2

siehe auch: [Welche Variablen werden in Delphi initialisiert?] (Http://stackoverflow.com/questions/861045/which-variables-are-initialized-when-in-delphi) – Ampere

Antwort

10

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.

+4

Oder der gleiche Code mit (wahrscheinlich) besser Lesbarkeit: ZeroMemory (@Foo, SizeOf (Foo)); – Im0rtality

+0

@Imoralität: Ich habe die Antwort aktualisiert, um Ihre ZeroMemory-Lösung zu integrieren. –

+0

Beachten Sie, dass ZeroMemory ein Wrapper für FillChar in * einigen * Versionen von Delphi ist (mindestens d6 und 7). –

Verwandte Themen