2012-06-11 42 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是未分配的,直到你進入循環。但是如果BoughtItems沒有Product項目,您將有一個未分配變量_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',一個值類型,默認爲'0',因爲它_can 't_有'null'值。 – Oded

2

裏面的代碼if語句不一定發生。初始化_index爲-1或某些「未找到」指示值,錯誤應該消失。

+0

這是唯一正確的答案。 –

2

什麼是BoughtItems?如果是List<T>只使用RemoveAll

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

稍微offtopic,但爲什麼RemoveFrmLis缺少鄰?這隻會傷害可讀性。使用完整的單詞。

相關問題