Unerwartete Inkonsistenz in C#-Records: Ein Problem mit dem `with`-Operator

2025-07-22
Unerwartete Inkonsistenz in C#-Records: Ein Problem mit dem `with`-Operator

Der Autor hat eine unerwartete Inkonsistenz bei der Verwendung von C#-Records entdeckt. Beim Aktualisieren von Records mit abgeleiteten Daten mithilfe des `with`-Operators werden die abgeleiteten Daten nicht neu berechnet, was zu Inkonsistenzen führt. Dies liegt daran, dass der `with`-Operator keinen Konstruktor aufruft, sondern einen Kopierkonstruktor verwendet, um eine Kopie zu erstellen und anschließend Eigenschaften zu ändern. Es werden verschiedene Lösungen vorgeschlagen, darunter die Vermeidung von `with` bei komplexen Records, das Schreiben eines Roslyn-Analyzers zur Problemdetektion, die Verwendung von `Lazy` für die verzögerte Berechnung von Eigenschaften und die Anforderung einer Sprachänderung. Dieser Beitrag hebt eine potenzielle Falle bei C#-Records hervor und warnt Entwickler vor der Verwendung des `with`-Operators, insbesondere bei abgeleiteten Daten.

Entwicklung with-Operator