Heim > Backend-Entwicklung > C++ > Warum führt das Hinzufügen von Elementen zu einer Liste zum Überschreiben?

Warum führt das Hinzufügen von Elementen zu einer Liste zum Überschreiben?

Susan Sarandon
Freigeben: 2025-01-19 20:30:14
Original
650 Leute haben es durchsucht

Why Does Adding Items to a List Result in Overwriting?

Listenüberschreibungen in C# verstehen

Das Hinzufügen von Elementen zu einem List<T> in C# kann manchmal zu unerwarteten Ergebnissen führen: Alle Elemente sind am Ende identisch mit dem zuletzt hinzugefügten. In diesem Artikel wird erläutert, warum und wie das Problem behoben werden kann.

Lassen Sie uns ein vereinfachtes Szenario untersuchen:

<code class="language-csharp">List<Tag> tags = new List<Tag>();
Tag _tag = new Tag(); // Problem: Single instance reused
string[] tagList = new[] { "Foo", "Bar" };

foreach (string t in tagList)
{
    _tag.tagName = t;
    tags.Add(_tag);
}</code>
Nach dem Login kopieren

Das Problem entsteht durch die Wiederverwendung derselben _tag Instanz innerhalb der Schleife. Bei jeder Iteration wird dasselbe Objekt geändert, was dazu führt, dass alle Listeneinträge den Endwert behalten.

Die Lösung: Neue Instanzen für jedes Element

Der richtige Ansatz besteht darin, für jede Schleifeniteration ein neues _tag-Objekt zu erstellen:

<code class="language-csharp">foreach (string t in tagList)
{
    Tag _tag = new Tag(); // New instance each time
    _tag.tagName = t;
    tags.Add(_tag);
}</code>
Nach dem Login kopieren

Dadurch wird sichergestellt, dass jedes Listenelement ein eindeutiges Objekt ist und eindeutige Werte erhalten bleiben.

Bonus: Das Verhalten von Strukturen

Interessanterweise würde der ursprüngliche Code korrekt funktionieren, wenn Tag eine Struktur anstelle einer Klasse wäre. Dieser Unterschied ergibt sich aus der Art und Weise, wie Klassen und Strukturen mit der Speicherzuweisung umgehen.

Klassen sind Referenztypen; Die Übergabe einer Klasse als Wert kopiert nur die Referenz, nicht das Objekt selbst. Durch Ändern des Parameters innerhalb einer Methode wird das ursprüngliche Objekt geändert. Strukturen hingegen sind Werttypen. Durch die Übergabe einer Struktur als Wert wird eine Kopie erstellt. Daher fügt das Hinzufügen von _tag (einer Struktur) zur Liste eine Kopie hinzu und verhindert so Überschreibungen.

Das obige ist der detaillierte Inhalt vonWarum führt das Hinzufügen von Elementen zu einer Liste zum Überschreiben?. 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