C#レコードにおける予期せぬ不整合:`with`演算子の落とし穴

2025-07-22
C#レコードにおける予期せぬ不整合:`with`演算子の落とし穴

著者はC#レコードを使用する際に予期せぬ不整合を発見しました。`with`演算子を使って派生データを含むレコードを更新すると、派生データが再計算されず、不整合が発生します。これは`with`演算子がコンストラクタを呼び出さず、コピーコンストラクタを使ってコピーを作成し、その後プロパティを変更するためです。いくつかの解決策が提案されており、複雑なレコードでは`with`を使用しないこと、問題を検出するRoslynアナライザを作成すること、`Lazy`を使ってプロパティの計算を遅延させること、言語の変更を要求することなどがあります。この記事はC#レコードにおける潜在的な落とし穴を指摘し、`with`演算子の使用、特に派生データを使用する場合には注意を促しています。

開発 with演算子