Heim >Backend-Entwicklung >C++ >Wie kann ich einzelne Elemente in einer Liste von Strukturen in C# ändern?
Den Wert eines Elements in einer Liste von Strukturen ändern
In der Programmierung ist die Manipulation von Datenstrukturen eine häufige Aufgabe. Beim Umgang mit Strukturlisten kann ein besonderes Problem auftreten, wenn versucht wird, den Wert eines einzelnen Elements zu ändern. In diesem Artikel wird der Grund für dieses Problem untersucht und eine mögliche Lösung bereitgestellt.
Bei der Arbeit mit Werttypen wie Strukturen stellt jede Werttypvariable oder Referenz eine bestimmte Instanz der Struktur dar. Durch das Zuweisen eines Werts aus einem Listenelement zu einer neuen Variablen, z. B. Struct obItem = MyList[1];, wird eine neue Instanz mit kopierten Mitgliedern erstellt. Alle an obItem vorgenommenen Änderungen wirken sich nicht auf das ursprüngliche Element in MyList aus.
Dieses Verhalten ergibt sich aus der Semantik von Werttypen. Wenn Sie einer neuen Variablen einen Werttyp zuweisen oder ihn als Argument übergeben, wird eine neue Instanz erstellt und die Werte kopiert. Dies steht im Gegensatz zu Referenztypen wie Klassen, bei denen sich Änderungen an einer Referenz auf das ursprüngliche Objekt auswirken.
Um das Problem der Änderung einzelner Elemente in einer Liste von Strukturen zu lösen, besteht ein Ansatz darin, eine Schnittstelle zu definieren Die Struktur implementiert und verwendet diese Schnittstelle, um auf die Struktur zuzugreifen. Dies ermöglicht die Änderung der tatsächlichen Struktur über eine Schnittstellenreferenz, die auf das Boxed-Objekt verweist.
Der folgende Codeausschnitt demonstriert diese Technik:
public interface IMyStructModifier { string Name { set; } } public struct MyStruct : IMyStructModifier { public string Name { get; set; } } List<object> obList = new List<object>(); obList.Add(new MyStruct("ABC")); obList.Add(new MyStruct("DEF")); MyStruct temp = (MyStruct)obList[1]; temp.Name = "Gishu"; foreach (MyStruct s in obList) // "ABC", "DEF" { Console.WriteLine(s.Name); } IMyStructModifier temp2 = obList[1] as IMyStructModifier; temp2.Name = "Now Gishu"; foreach (MyStruct s in obList) // "ABC", "Now Gishu" { Console.WriteLine(s.Name); }
Diese Methode ermöglicht die Änderung der ursprünglichen Struktur in der Liste über die Schnittstellenreferenz.
Es ist wichtig, die Kompromisse zwischen der Verwendung von Strukturen und Klassen zum Speichern in Sammlungen zu berücksichtigen. Strukturen bieten Leistungsvorteile und werden bevorzugt, wenn Unveränderlichkeit oder ein geringer Speicherbedarf gewünscht sind. Wenn jedoch das Ändern von Elementen in einer Liste erforderlich ist, sind Klassen möglicherweise eine geeignetere Option.
Das obige ist der detaillierte Inhalt vonWie kann ich einzelne Elemente in einer Liste von Strukturen in C# ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!