自動実装プロパティを使用しています。以下を修正する最も早い方法は、独自のバッキング変数を宣言することだと思います。
public Point Origin { get; set; }
Origin.X = 10; // fails with CS1612
エラー メッセージ: 'expression' の戻り値は変数ではないため変更できません
中間式の結果である値タイプを変更しようとしました。値は永続化されないため、変更されません。
このエラーを解決するには、式の結果を中間値に格納するか、中間式に参照型を使用します。
ベストアンサー1
Point
これは、 が値型 ( ) であるためですstruct
。
このため、Origin
プロパティにアクセスすると、コピーclass
クラスが保持する値であり、参照型 ( )の場合のように値自体ではありません。そのためX
、プロパティを設定すると、コピーのプロパティが設定されてから破棄され、元の値は変更されません。これはおそらく意図したものではないため、コンパイラが警告を発しています。
値だけを変更したい場合はX
、次のようにする必要があります。
Origin = new Point(10, Origin.Y);