2014-02-08 3 views
0

본질적으로 모든 백팩에서 금을 제거하고 다른 금액을 다시 추가해야하며 컬렉션 수정 오류가 발생했습니다. 분명히 작동 방식이 .NET과 완전히 다릅니다. 2.0, 누구든지 내게 손을 줄 수 있을까?컬렉션이 수정되었습니다 .NET2.0

Type[] types = new Type[] { typeof(Gold) }; 

int[] amounts = new int[] { 1 }; 

foreach(Item i8 in World.Items.Values) 
{ 
    if(i8 is Container) 
    { 
     Container c1 = (Container)i8; 
     int _Index = BackpackList.IndexOf(c1.Serial); 
     if (_Index>=0) 
     { 
      amounts[0] = GoldOriginal[_Index]; 
      int NewAmount = GoldAmounts[_Index]; 

      if (c1!=null) { c1.ConsumeTotal(types, amounts); } 
      if (c1!=null && NewAmount>0) { c1.AddItem(new Gold(NewAmount)); } 
     } 
    } 
} 
+0

ConsumeTotal 메서드의 코드를 붙여 넣을 수 있습니까? –

+0

foreach 루프에서 호출되는 메서드에서 World.Items.Values를 수정했을 가능성이 있지만 더 많은 코드가 필요없이 말할 수 있습니다. – Dirk

답변

0
Type[] types = new Type[] { typeof(Gold) }; 

int[] amounts = new int[] { 1 }; 

List<Item> items = new List<Item>(World.Items.Values); 
foreach(Item i8 in items ) 
{ 
    if(i8 is Container) 
    { 
     Container c1 = (Container)i8; 
     int _Index = BackpackList.IndexOf(c1.Serial); 
     if (_Index>=0) 
     { 
      amounts[0] = GoldOriginal[_Index]; 
      int NewAmount = GoldAmounts[_Index]; 

      if (c1!=null) { c1.ConsumeTotal(types, amounts); } 
      if (c1!=null && NewAmount>0) { c1.AddItem(new Gold(NewAmount)); } 
     } 
    } 
} 

이 변경 오류를 방지 할 수 있습니다. 변경 사항은 iterating하는 동안 World.Items에 대한 추가 또는 삭제를 무시합니다.

+0

Linq는 .NET 2.0에 존재하지 않습니다. – user3287662

+0

Duh! (이마를 때리다). 코드를 편집 했으니 까. –

관련 문제