2

リストからポイントにアクセスしているときに、ポイントの Y 座標の設定に問題があります。

たとえば、これは機能します。

System.Windows.Point test = new System.Windows.Point(6,5);
test.Y = 6;

ただし、ポイントのリストがあり、リストを介してポイントにアクセスして Y 座標を設定すると、エラーが発生します。

List<System.Windows.Point> bfunction = new List<System.Windows.Point>();
bfunction.Add(new System.Windows.Point(0, 1));
bfunction[0].Y = 6;

bfunction[0] には下線が引かれ、「'System.Collections.Generic.List.this[int]' は変数ではないため、'System.Collections.Generic.List.this[int]' の戻り値を変更できません」というエラーが表示されます。

どんな助けでも大歓迎です。

4

2 に答える 2

5

基本的に、コンパイラは間違いを犯さないようにしています。アクセスすると、ポイントのコピーbfunction[0]が返されます。残念ながら(IMO)可変構造体です。したがって、コンパイラがコピーの変更を許可した場合、そのコピーは破棄され、ステートメントは無意味になります。代わりに、変数を使用してコピーを取得し、そこで変更してから、リストに戻す必要があります。Point

Point point = bfunction[0];
point.Y = 6;
bfunction[0] = point;

これは、参照型の場合は必要ありません。代わりに不変の値型の場合はPoint、エラーを発生させる機会がありませんでした。フェッチと設定を個別に行う必要はありますが、次のようになります。Point

bfunction[0] = bfunction[0].WithY(6);

...どこで、元の値と同じ値をWithY持つ値が返されますが、指定された .PointXY

于 2013-04-25T19:10:16.977 に答える