Wert einer struct in einer List läßt sich nicht ändern
-
Warum funktioniert das nicht:
class Program { struct Struktur { public int zahl; } static void Main(string[] args) { List<Struktur> s = new List<Struktur>(); s.Add(new Struktur()); s[0].zahl = 10; /* --> Fehler: Der Rückgabewert "System.Collections.Generic.List<Test.Program.Struktur>.this[int]" kann nicht geändert werden, da er keine Variable ist. */ } }
Es handelt sich doch um eine Variable. Warum kann ich die innerhalb einer List nicht ändern?
-
Mach aus struct ein class. Dann gehts.
-
Erklärung:
structs sind value types, classes sind reference types.
D.h. der Index-Operator gibt in deinem Fall einen Value-Type zurück der nichts mit dem Wert in deiner Liste zu tun hat.
-
Es handelt sich doch um eine Variable. Warum kann ich die innerhalb einer List nicht ändern?
Ein kleiner Hinweis noch. Bei Compilerfehlern ist es immer hilfreich F1 zu drücken. Hättest Du das gemacht, so hättest Du in etwa das lesen können:
Compilerfehler CS1612
Fehlermeldung: Der Rückgabewert "Ausdruck" kann nicht geändert werden, da er keine Variable ist.
Es wurde der Versuch unternommen, einen Werttyp zu ändern, der das Ergebnis eines Zwischenausdrucks ist. Da der Wert nicht beibehalten wird, bleibt er unverändert. Um diesen Fehler zu beheben, speichern Sie das Ergebnis des Ausdrucks in einem Zwischenwert oder benutzen einen Referenztyp für den Zwischenausdruck.
Beispiel: [...], usw.
-
Danke für die Hilfe.