2013-06-12 3 views
1

나는 StockMultibuy 항목의 목록을 가지고 있고, 그 항목의 목록을 구축하고있다. 목록에있는 항목 중 일부는 기존 항목과 다른 속성을 갖고 싶기 때문에 항목의 새 인스턴스를 만들고 속성을 변경 한 다음 목록에 추가하려고했습니다. 이미 목록에있는 항목을 업데이트 할 예정이 아니 었습니다. 이 예상되는 동작입니까? 이것을 극복하기 위해 내가 할 수있는 일이 있습니까? 당신은 목록에 여러 항목을 추가하지 않을목록에 새 항목을 추가하여 목록의 이전 항목을 업데이트해야합니까?

덕분에

StockMultibuy aNewItem = StaticLists.GetStockMultibuyForBarcode(sBarcode); 

// If we've got enough items to qualify, then add a free item 
if (Reward.StockItemsTaken.Count % (Reward.FreeWhenQualified + Reward.QualifyingQty) 
    == Reward.QualifyingQty) 
{ 
    aNewItem.PromoPrice = 0; 
} 
// Save this for later so that we know we've added a regular item 
else 
{ 
    aNewItem.PromoPrice = Convert.ToDecimal(aNewItem.Sell); 
} 

Reward.StockItemsTaken.Add(aNewItem); 
+5

는 _references_의 개념을 이해하시기 바랍니다. –

+0

목록에 같은 항목이있는 경우 새 항목을 추가하고 아무 것도 수정하지 않습니다. 그것이 수정해야 할 유일한 이유는 당신이 그것을 너무 어딘가에 말해 준다는 것입니다. –

+0

'StaticLists.GetStockMultibuyForBarcode (sBarcode)'메소드 코드를 보여주십시오. –

답변

6

, 당신은 똑같은 항목을 여러 번 추가하고 그것을마다 수정하고 있습니다. C에서 #

클래스 참조 타입이다; 즉, 각 변수는 객체 자체에 대한 데이터를 보유하지 않고 객체가있는 위치에 대한 참조를 보유합니다. 객체를 다른 변수에 할당하면 새 객체가 생성되지 않고 동일한 객체에 참조가 복사됩니다.

문제는 당신이 목록에 새 항목을 추가 갈 때마다 (즉 new 키워드를 사용하여) 새로운 객체를 생성해야한다는 것입니다.

코드의 모습에서

StaticLists.GetStockMultibuyForBarcode(sBarcode) 새로운 항목을 매번 반환하지 않습니다 것으로 보인다; 같은 항목을 반환하거나 기존 항목 중 적어도 하나를 반환하는 것입니다. 새 항목을 만들어서 해당 항목의 일부 값을 복사 한 다음 (의도 한 경우) 새 항목을 목록에 추가해야합니다. 이 기준이기 때문에

그것은 예상된다
0

,이 업데이트됩니다. 나는 단지 객체의 복사본을 만들거나 가능한 경우 복제 할 것입니다.

관련 문제