Werte in einer Liste von Strukturen ändern
Beim Arbeiten mit einer Liste von Strukturen kann beim Versuch, Elemente zu ändern, ein Fehler auftreten. Dieses Problem entsteht aufgrund der Werttypsemantik von Strukturen, die für jede Werttypvariable separate Instanzen erstellen. Wenn also ein Strukturelement in eine andere Variable kopiert wird, wirkt sich seine Änderung nicht auf das ursprüngliche Element aus.
Die Lösung für dieses Dilemma liegt in der Tatsache, dass Strukturen Schnittstellen offenlegen können. Durch Erstellen einer Schnittstelle mit einem Set-Accessor für die gewünschte Eigenschaft kann man die zugrunde liegende Struktur über die Schnittstellenreferenz ändern, die auf das Boxed-Objekt zeigt. Der folgende Code demonstriert dieses Konzept:
public interface IMyStructModifier { String Name { set; } } public struct MyStruct : IMyStructModifier { ... } List<Object> obList = new List<object>(); obList.Add(new MyStruct("ABC")); obList.Add(new MyStruct("DEF)); // Using a boxed object MyStruct temp = (MyStruct)obList[1]; temp.Name = "Gishu"; // Using the interface IMyStructModifier temp2 = obList[1] as IMyStructModifier; temp2.Name = "Now Gishu";
Diese Methode ermöglicht die Änderung von Elementen in einer Liste von Strukturen, obwohl dies zu Boxing führen kann. Daher sollte bei der Betrachtung des Entwurfs eines Typs die Notwendigkeit der Sammlungsspeicherung und -modifikation nicht die geeignete semantische Wahl zwischen einer Klasse und einer Struktur außer Kraft setzen.
Das obige ist der detaillierte Inhalt vonWie kann ich Werte innerhalb einer Liste von Strukturen in C# ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!