Heim > Backend-Entwicklung > C++ > Warum werden meine Listenelemente beim Hinzufügen mehrerer Objekte überschrieben?

Warum werden meine Listenelemente beim Hinzufügen mehrerer Objekte überschrieben?

Linda Hamilton
Freigeben: 2025-01-19 20:23:10
Original
672 Leute haben es durchsucht

Why Are My List Items Overwritten When Adding Multiple Objects?

Listenwert wird beim Hinzufügen mehrerer Elemente überschrieben

Problem:

Das Hinzufügen mehrerer Elemente zu einer Liste führt dazu, dass alle Listenelemente mit dem Wert des zuletzt hinzugefügten Elements überschrieben werden. Dies geschieht unabhängig von den Anfangswerten der Elemente.

Ursachen:

  • Referenzbasierte Zuweisung: In objektorientierten Kontexten bedeutet die Übergabe von Objekten als Referenz, dass sich alle Eigenschaftsänderungen auf das ursprüngliche Objekt auswirken.
  • Wiederverwendung von Objekten: Der Code verwendet wahrscheinlich eine einzelne Objektinstanz innerhalb einer Schleife wieder. Nachfolgende Zuweisungen überschreiben die Eigenschaften des Objekts, was zum beobachteten Überschreibverhalten führt.

Auflösung:

Die Lösung besteht darin, für jede Iteration eine neue Objektinstanz zu erstellen:

<code class="language-csharp">foreach (string t in tagList)
{
    Tag _tag = new Tag(); // New Tag object for each iteration

    _tag.tagName = t;
    tags.Add(_tag);
}</code>
Nach dem Login kopieren

Alternative: Nutzung von Strukturen

Durch den Wechsel von einer Klasse zu einer Struktur wird das Überschreibproblem beseitigt, weil:

  • Wertbasierte Übergabe: Strukturen sind Werttypen; Sie werden als Wert übergeben.
  • Objektkopieren: Wenn eine Struktur übergeben wird, wird eine Kopie erstellt, keine Referenz. Jeder Add-Vorgang erstellt eine neue Strukturinstanz und behält eindeutige Werte bei.

Das obige ist der detaillierte Inhalt vonWarum werden meine Listenelemente beim Hinzufügen mehrerer Objekte überschrieben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage