2012-05-05 11 views
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) 

その後、私はlistOfPoint[0]のY値を変更したいので:

listOfPoint[0].Y = 11; 

再び印刷リストを、出力は次のとおりです。

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

なぜ出力されません。

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

そして、どのように私はこのようにそれを行うことができますか?

+3

あなた 'Point'クラスを投稿してください。 'listOfPoints'をどのように作成したかを見せてください。 – Oded

+1

'listOfPoint [i] = listOfPoint [i-1]'は新しい 'Point'オブジェクトを作成しません。同じ 'Point'オブジェクトを参照する2つの要素があります。 – birryree

+1

'Point'を' class'ではなく 'struct'にするべきでしょう。 WinFormsのビルトインのものを使用してください。 – Ryan

答えて

0

はこれが起こります。これはポインタによるものです。問題を回避するために、これを行うには

試してみてください。

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); 
} 
1

"1つずつ移動"(2番目のループ)の最後に、listOfPoint [0]とlistOfPoint [1]は同じオブジェクトを指します。これは、この行を追加しないようにするには:あなたが同じオブジェクトを参照するアレイの2つの要素を持っているので

listOfPoint[0] = new Point(listOfPoint[1].X, listOfPoint[1].Y); 
+0

robrich - ありがとう – Worrior

関連する問題