C# の「戻り値を変更できません」エラーのトラブルシューティング
C# で「'...' の戻り値は変数ではないため、変更できません」というエラーは、自動実装されたプロパティと値の型を操作するときによく発生します。 これは、値型プロパティにアクセスすると、元のデータへの直接参照ではなく、データのコピーが返されるために発生します。
値型と参照型: 主要な問題
自動実装されたプロパティは、デフォルトで値の型 (struct Point
など) を保持します。 値型プロパティにアクセスするときは、一時コピーを操作することになります。 このコピーに加えられた変更は、操作が完了すると失われます。
変更が失敗する理由
値型プロパティを直接変更しようとすると (例: Origin.X = 10;
)、この一時コピーのみが変更され、元のプロパティは変更されません。これにより、「戻り値を変更できません」というコンパイラ エラーが発生します。
効果的な解決策
プロパティを正しく変更する 2 つの方法は次のとおりです。
参照型を使用する: 値型の代わりに参照型 (クラス) を使用してプロパティを定義します。 オブジェクトのプロパティを変更すると、そのプロパティが保持する元の値に直接影響します。
<code class="language-csharp">public Point Origin { get; set; } = new Point(); // Now Origin is a reference type</code>
変更された値を再割り当てします: 更新された値を使用して値タイプの新しいインスタンスを作成し、この新しいインスタンスをプロパティに割り当て直します。
<code class="language-csharp">Origin = new Point(10, Origin.Y); // Create a new Point and assign it back to Origin</code>
最初のアプローチ (参照型を使用する) は、特に複雑なオブジェクトを扱う場合に、よりクリーンで直感的なコードを実現するために一般に好まれます。 2 番目のアプローチ (再割り当て) は、より単純なシナリオに適していますが、値の型が大きいか複雑な場合は効率が低下する可能性があります。
以上がC# で自動実装プロパティを使用すると「戻り値を変更できません」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。