2012-05-05 4 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) 

이 후 Y 값을 listOfPoint[0]으로 변경하고 싶습니다. 그래서 :

listOfPoint[0].Y = 11; 

인쇄 다시 목록과 출력은 다음과 같습니다

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

그리고 내가 그것을이 같은 방법을 수행 할 수 있습니다

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

이 왜 출력되지 않습니다?

+3

후 귀하의'Point' 클래스를. 'listOfPoints'를 어떻게 만들 었는지 보여주세요. – Oded

+1

'listOfPoint [i] = listOfPoint [i-1]'은 새로운'Point' 객체를 생성하지 않습니다. 동일한 'Point' 객체를 참조하는 두 개의 요소가 있습니다. – 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

"하나씩 위로 이동"(second for 루프) 끝에 listOfPoint [0] 및 listOfPoint [1]이 (가) 같은 개체를 가리 킵니다. 이 문제를 방지하려면 다음 행을 추가하십시오.

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

robrich - Thank you :) – Worrior

관련 문제