0

簡単なクラス を作成pointしました。これをリストで使用したいと考えています。

リストには3つのポイントがあります。私がそれを印刷した場合:

for (int i = listOfPoint.Count -1; i >=0; i--)
{
    Console.WriteLine(listOfPoint[i].toString());
}

出力は次のとおりです。

(32, 10)
(33, 10)
(34, 10)

今、私はこれをしたい:

for (int i = listOfPoint.Count -1; i > 0; i--)
{
    listOfPoint[i] = listOfPoint[i - 1];
}

この後 - 印刷:

(33, 10)
(34, 10)
(34, 10)

この後 - の Y 値を変更したいlistOfPoint[0]ので、次のようにします。

listOfPoint[0].Y = 11;

リストを再度印刷すると、出力は次のようになります。

(33, 10)
(34, 11)
(34, 11)

出力がないのはなぜですか:

(33, 10)
 (34, 10) 
(34, 11)

そして、どうすればこのようにできますか?

4

2 に答える 2

1

「1つ上に移動」(2番目のforループ)の最後に、listOfPoint[0]とlistOfPoint[1]が同じオブジェクトを指します。これを回避するには、次の行を追加します。

listOfPoint[0] = new Point(listOfPoint[1].X, listOfPoint[1].Y);
于 2012-05-05T18:05:56.593 に答える
0

これは、同じオブジェクトを参照する配列の2つの要素があるために発生します。これはポインタによるものです。

問題を回避するためにこれを実行してみてください。

for (int i = listOfPoint.Count -1; i > 0; i--)
{
    //Pass the value not the pointer
    listOfPoint[i] = new Point(listOfPoint[i-1].X, listOfPoint[i-1].Y);
}
于 2012-05-05T18:06:18.287 に答える