2011-05-10 4 views
3

나는 다음과 같은 코드가 있습니다목록에 개체에 대한 참조를 추가

Point a = new Point(3, 3); 

List<Point> points = new List<Point>(); 

points.Add(a); 

a = new Point(50,50); 

a.X += 50; 

을하지만 또한 목록의 값에 영향을 미치는 코드의 마지막 두 줄을 싶은 말; 이 일을 어떻게하면 될까요? 내 생각 엔 목록에 포인터를 추가하는 것일까 요? 하지만 그때도 "새로운 포인트 (50, 50)"라고 생각합니다. 여전히 목록의 값을 업데이트하지 않습니까?

감사

+0

목록에서 직접 값에 액세스 할 수 있다는 것을 알고 있습니다. 하지만 그건 내가하고 싶은 것이 아닙니다. 목록에 추가하여 특정 변수를 추적하는 디버깅 창을 만들고 싶습니다. 추적하고자하는 변수는 디버깅 창에 표시되어야하는 이미지이므로 디버거를 사용하는 것은 의미가 없습니다. – Christo

답변

0

직접 목록의 값에 액세스 할 :

points[0] = new Point(50, 50); 
1

아니, 필요하지 않은 포인터. .NET 세계에서 객체에 대한 참조는 관리되지 않는 코드의 세계에서 포인터와 본질적으로 동일하다고 생각할 수 있습니다. 두 가지 모두가 있다는 사실을 추가 할 때 약간의 트릭 킹이 발생하지만,이 경우 객체 또는 객체 참조를 배열에서 직접 수정하는 것으로 충분합니다.

그래서, 당신은 다음 중 하나를 수행 할 수 있습니다

points[0] = new Point(50, 50); 

또는

points[0].X = 50; 
points[0].Y = 50; 

을 (당신이 그들이 불변 인 것처럼 구조를 치료해야 probably get into the habit, 그래서 예를 목적으로 위의 생각하지만, 만).

+0

실제로'points'가'List '이고 어레이가 아니라면 (질문과 같이)'points [0] .X = 50;'컴파일 오류가 발생하기 때문에 할 수 없습니다 :'Can not modify 'System.Collections.Generic.List 의 반환 값입니다.이 [int]'는 변수가 아니기 때문에 '입니다. – digEmAll

관련 문제