Fehlerbehebung für den C#-Fehler „Rückgabewert kann nicht geändert werden“
Der Fehler „Der Rückgabewert von ‚...‘ kann nicht geändert werden, da es sich nicht um eine Variable handelt“ tritt in C# häufig auf, wenn mit automatisch implementierten Eigenschaften und Werttypen gearbeitet wird. Dies liegt daran, dass der Zugriff auf eine Eigenschaft vom Typ Wert eine Kopie der Daten zurückgibt und keinen direkten Verweis auf das Original.
Werttypen vs. Referenztypen: Das Kernproblem
Automatisch implementierte Eigenschaften enthalten standardmäßig Werttypen (wie struct Point
). Wenn Sie auf eine Eigenschaft vom Typ „Wert“ zugreifen, arbeiten Sie mit einer temporären Kopie. Alle an dieser Kopie vorgenommenen Änderungen gehen verloren, sobald der Vorgang abgeschlossen ist.
Warum die Änderung fehlschlägt
Der Versuch, eine Eigenschaft vom Werttyp direkt zu ändern (z. B. Origin.X = 10;
), ändert nur diese temporäre Kopie und lässt die ursprüngliche Eigenschaft unverändert. Dies führt zum Compilerfehler „Rückgabewert kann nicht geändert werden“.
Effektive Lösungen
Hier gibt es zwei Möglichkeiten, die Eigenschaft korrekt zu ändern:
Verwenden Sie einen Referenztyp: Definieren Sie Ihre Eigenschaft mithilfe eines Referenztyps (einer Klasse) anstelle eines Werttyps. Änderungen an den Eigenschaften des Objekts wirken sich dann direkt auf den ursprünglichen Wert der Eigenschaft aus.
public Point Origin { get; set; } = new Point(); // Now Origin is a reference type
Geänderten Wert neu zuweisen: Erstellen Sie eine neue Instanz des Werttyps mit den aktualisierten Werten und weisen Sie diese neue Instanz wieder der Eigenschaft zu.
Origin = new Point(10, Origin.Y); // Create a new Point and assign it back to Origin
Der erste Ansatz (Verwendung eines Referenztyps) wird im Allgemeinen für saubereren und intuitiveren Code bevorzugt, insbesondere beim Umgang mit komplexen Objekten. Der zweite Ansatz (Neuzuweisung) eignet sich für einfachere Szenarien, ist jedoch möglicherweise weniger effizient, wenn der Werttyp groß oder komplex ist.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in C# die Fehlermeldung „Der Rückgabewert kann nicht geändert werden', wenn ich mit automatisch implementierten Eigenschaften arbeite?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!