Heim >Backend-Entwicklung >C++ >Wie kann ich Elemente in einer C#-Strukturliste ändern?

Wie kann ich Elemente in einer C#-Strukturliste ändern?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-05 19:39:45497Durchsuche

How Can I Modify Elements in a C# List of Structs?

Ändern von Elementen in einer Liste von Strukturen

In C# sind Strukturen Werttypen, was bedeutet, dass jede Instanz ihre eigene Datenkopie enthält. Dieses Verhalten unterscheidet sich von Klassen, bei denen Referenzen auf dasselbe zugrunde liegende Objekt verweisen. Bei der Arbeit mit Strukturlisten ist es wichtig, die Semantik dieser Werttypen zu verstehen.

Beachten Sie den folgenden Code:

List<MyStruct> MyList = new List<MyStruct>();
MyList.Add(new MyStruct("john"));
MyList.Add(new MyStruct("peter"));

MyList[1].Name = "bob"; // Attempt to modify an element

Dieser Code löst einen Fehler aus, der besagt, dass der Rückgabewert von MyList [int] kann nicht geändert werden, da es keine Variable ist. Dieser Fehler ist auf die Tatsache zurückzuführen, dass Werttypen bei der Zuweisung kopiert werden.

Struct obItem = MyList[1]; // Creates a new instance of MyStruct
obItem.Name = "Gishu"; // Modifies the new instance

Hier ist obItem eine neue Instanz von MyStruct mit einer Kopie der Daten von MyList[1]. Alle an obItem vorgenommenen Änderungen wirken sich nicht auf das ursprüngliche Element in der Liste aus.

Lösung:

Wenn Sie Elemente in einer Liste von Strukturen ändern müssen, beachten Sie Folgendes Optionen:

  1. Verwenden Sie stattdessen eine Klasse: Klassen sind Referenztypen, die Änderungen am zugrunde liegenden Objekt ermöglichen um sich im gesamten Code zu verbreiten.
  2. Eine Schnittstelle verfügbar machen: Strukturen können Schnittstellen implementieren, sodass Sie die eigentliche Struktur über eine Schnittstellenreferenz ändern können. Dieser Ansatz führt in das Boxen ein, das mit Vorsicht angewendet werden sollte.

Hier ist ein Beispiel für die Verwendung einer Schnittstelle:

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"));

IMyStructModifier temp2 = obList[1] as IMyStructModifier;
temp2.Name = "Now Gishu";

foreach (MyStruct s in obList) // => "ABC", "Now Gishu"
{
    Console.WriteLine(s.Name);
}

Fazit:

Während Klassenlisten eine größere Flexibilität beim Ändern von Elementen bieten, können Strukturen nützlich sein, wenn Wertesemantik wünschenswert ist. Wenn Sie die Natur von Werttypen verstehen und alternative Lösungen erkunden, können Sie effektiv mit Strukturlisten in C# arbeiten.

Das obige ist der detaillierte Inhalt vonWie kann ich Elemente in einer C#-Strukturliste ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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