C# での「戻り値を変更できません」エラー
自動実装されたプロパティを使用すると、「戻り値を変更できません」エラーが発生することがあります。例:
<code class="language-csharp">public Point Origin { get; set; } Origin.X = 10; // 出现 CS1612 错误</code>
エラー原因分析
このエラーは、Point
が値型 (構造体) であるために発生します。 Origin
属性にアクセスすると、値自体ではなく、クラスに保持されている値のコピーが返されます。コピーのプロパティを変更しても、元の値には影響しません。
解決策
この問題を解決するには、基になる値を直接変更する必要があります。値型の場合、これは一時変数にコピーを保存し、その変数にプロパティを設定することで実現できます:
<code class="language-csharp">Point originCopy = Origin; originCopy.X = 10; Origin = originCopy;</code>
または、独自のバックアップ フィールドを作成して値の型を保存し、フィールドを直接変更することもできます。
<code class="language-csharp">private Point _origin; public Point Origin { get { return _origin; } set { _origin = value; } }</code>
このようにして、Origin
属性を直接変更できます。
<code class="language-csharp">Origin.X = 10; // 此行现在可以正常工作,不会报错</code>
以上がC# で自動実装されたプロパティで「戻り値を変更できません」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。