2009-04-28 4 views
1

다음 코드와 관련하여 흥미로운 문제가 발생했습니다. productObject는 'VendorLocationId'를 비롯한 많은 제품 관련 변수가 포함 된 맞춤형 개체입니다. ASP.net C# 마법 배열 문제

리스트 박스에서 이들 항목을 감안 :

「거리 A "값 1

「거리 B」의 값 : 2

가 또한 주어진다 : 두 항목은리스트 박스 내에 선택됩니다. 나는이 곤혹을 찾을

productObjectArray[0].VendorLocationId = 2 
productObjectArray[1].VendorLocationId = 2 

: 실행 한 후

1 productObjectArray[] productObjectArray = new productObjectArray[lstLocation.Items.Count]; 
2 int counter = 0; 
3 foreach (ListItem li in lstLocation.Items) 
4 { 
5 if (li.Selected == true) 
6 { 
7  productObject.VendorLocationId = li.Value; 
8  productObjectArray[counter] = productObject; 
9 } 
10 counter++; 
11 } 

은, 위의 코드는이 결과를 제공합니다. productObjectArray [0] .VendorLocationId는 마술처럼 2와 counter = 1이됩니다.

답변

1

"productObject"가 다음과 같이 나타납니다. 코드에서 productObjectArray [0] .VendorLocationId = 1 및 counter = 이 코드 블록 외부에서 선언되므로 배열의 두 요소 모두 과 동일한 객체으로 참조됩니다. 따라서 "productObject"를 루프의 마지막 시간으로 변경하면 배열의 모든 항목에 영향을 미치며, 이는 모두 동일한 정확한 객체를 가리키고 있기 때문입니다. 배열의 각 요소가 객체의 새 인스턴스를 가리 키도록해야합니다.

+0

정확하겠습니다. 감사합니다. 각 배열 항목에 대해 새 객체를 생성하여 코드를 수정했습니다. – Paulj

1

productObject의 단일 인스턴스를 사용하고 productObjectArray의 두 항목을 모두 단일 인스턴스를 가리 키도록 설정 한 것처럼 보입니다. VendorLocationId는 productObject에 마지막으로 설정된 값이므로 모두에서 2입니다.