ref struct instanzieren - struct immer gefüllt ?
-
Abend Leute ...
ref struct emailinfo { String^ test1; String^ text2; usw. };
Instanziert via:
for each (String^ xyz in blabla) { emailinfo^ instanz = gcnew emailinfo (); instanz->test1 = "bla"; }
Aus welchem Grund erhalte ich hier dann eine bereits gefüllte Struktur - und vor allem wie gehe ich vor, um eine leere Instanz zu erhalten?
-
Hallo,
was meinst du mit bereits gefüllt? Der Code funktioniert nur, da Strings immutable sind und du damit mit der Zuweisung nicht den Wert der Variablen änderst, sondern nen neues Objekt zuweist. Deshalb macht es nichts das die Stringvariable an sich noch uninitialisiert war.
-
Habe mich unklar ausgedrückt:
System::Collections::Generic::List<emailinfo^>^ liste = gcnew Sys.... for (int x = 0; x < 4; x++) { emailinfo^ instanz = gcnew emailinfo (); instanz->test1 = "bla" + x.ToString (); liste->Add (instanz) }
Wenn der erste durchgang abgeschlossen ist, ist die Struktur gefüllt. Beim zweiten durchgang möchte ich jedoch eine völlig leere Instanz der Struktur haben. Wie erreiche ich das ?
-
hallo,
mit dem gcnew erstellst du doch nen neues Objekt. Das ist doch dann wieder "leer". Oder was meinst du?
-
Zwergli schrieb:
hallo,
mit dem gcnew erstellst du doch nen neues Objekt. Das ist doch dann wieder "leer". Oder was meinst du?
Schon richtig, nur er überschreibt immer instanz auf's neue...
-
Was ja eigentlich kein Problem ist da es ja eine *Referenz* und kein Tracking-Handle ist... eigentlich seh ich da keine Probleme, ausser dass es etwas unschön ist, dass er Referenzen in der Liste speichert anstelle von structs...
-
Jungs, irgendwie verstehe ich das nicht ganz. Der Fehler liegt mit sicherheit woanders, also mal mehr Code:
ref struct emailinfo { String^ test1; String^ text2; static System::Collections::Generic::List<String^>^ boundarys;// = gcnew System::Collections::Generic::List<String^>(); ... };
void check () { System::Collections::Generic::List<emailinfo^>^ emailinfolist = gcnew System::Collections::Generic::List<emailinfo^>(); for each (String^ email in emailbuffer) { //Neue Instanz der Info Struktur erstellen emailinfo^ instanz = gcnew emailinfo (); //Quellcode in Stuktur speichern instanz->quellcode = email; if (containsBoundarys (instanz) == true) { parseBoundarys (instanz); } emailinfolist->Add (instanz);
Wie gesagt, erhalte ich nach dem ersten durchlauf eine wie von mir gewünscht gefüllte Struktur. Darunter auch die List Boundarys mit ihren Einträgen.
Beim zweiten durchlauf wird die Struktur auch wie gewollt mit den neuen Daten gefüllt, jedoch enthällt die List Boundarys hier auch den Eintrag des ersten durchgangs. Das ist mit Sicherheit einfach zu lösen, nur sehe ich einfach nicht, wo der fehler liegt.
-
Mach einfach boundarys nicht statisch!!!
BTW: Die korrekte Merhzahl wäre boundaries.
-
Zum Mäusemelken ... Natürlich.