2012-06-11 3 views
0

다음과 같은 방법으로 목록에서 항목을 제거하려고 할 때 그 작업을 수행 할 수 없습니다 ... 이유는 무엇입니까? "할당되지 않은 지역 변수 사용" 위치는 다음과 같이 할당되어 있습니다. 아래에 표시됩니다 :왜이 방법으로 목록에서 항목을 제거하는 것이 불가능합니까?

public void RemoveFrmList(int ProdId) 
     { 
      int _index; 
      foreach (Products item in BoughtItems) 
      { 
       if (item.ProductID == ProdId) 
       { 
        _index = BoughtItems.IndexOf(item); 
       } 

      } 
      BoughtItems.RemoveAt(_index); 
     } 

이 오류를 제거하려면 어떻게해야합니까?

+0

반복중인 목록을 변형하고 있습니다. 너는 그렇게 할 수 없다. – bluevector

+2

'ProdId'가 존재하지 않는다면 어떤 일이 일어날 지 생각해보십시오 ... – IngisKahn

답변

1

_index은 루프에 들어갈 때까지 할당되지 않았습니다. 그러나 BoughtItemsProduct 항목이없는 경우 지정되지 않은 변수 _index이 표시됩니다. 아니면 item.ProductID == ProdID으로 아이템을 얻지 못할 수도 있습니다. 그래서 다른 말로

:

int _index; 
foreach (Products item in BoughtItems) 
{ 
    //Code here is not executed during runtime for reasons stated above. 
} 
BoughtItems.RemoveAt(_index); //error here because _index was not assigned! 

이 문제를 해결하려면, 당신은 문이 반드시 발생하지 않는 경우 내부

int _index = -1; 
foreach (...) 
{ 
    //... 
} 
if (_index != -1){ 
    BoughtItems.RemoveAt(_index); 
} 
else 
{ 
    //handle case if needed 
} 
+0

다음은 무엇을 할 수 있을까요? (( –

+0

'_index'는 값 형식 인 int입니다.) _can은 기본값으로 '0'입니다. 't_가'null '값을 가지고 있습니다. – Oded

2

같은 코드를 뭔가를 할 수 있습니다. _index를 -1로 초기화하거나 값을 나타내는 "찾을 수 없음"을 지정하면 오류가 사라집니다.

+0

이것은 유일한 정답입니다. –

2

BoughtItems은 무엇입니까? 이 List<T>을의 경우 단지 RemoveAll

public void RemoveFrmList(int ProdId) 
{ 
    BoughtItems.RemoveAll(item => item.ProductID == ProdId); 
} 

약간 논외 그런데 왜 RemoveFrmLis이 누락 된 O를 사용할 수 있습니까? 가독성이 떨어집니다. 완전한 단어를 사용하십시오.

관련 문제