0

我有一个问题,当我尝试通过以下方式从任何列表中删除项目时,我无法做到这一点......为什么会这样,所以错误是“使用未分配的局部变量”,它在哪里被分配,如下所示:

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

            }
            BoughtItems.RemoveAt(_index);
        }

可以做些什么来消除这个错误?

4

3 回答 3

2

if 语句中的代码不一定会出现。将 _index 初始化为 -1 或一些“未找到”指示值,错误应该会消失。

于 2012-06-11T19:25:59.150 回答
2

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

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

有点题外话,但为什么 RemoveFrmLis 缺少 o?它只会损害可读性。使用完整的单词。

于 2012-06-11T19:26:59.080 回答
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
}
于 2012-06-11T19:23:49.383 回答