0

我正在尝试比较列表视图中是否已经存在项目。
它说 :

使用未分配的局部变量“alreadyInList”

bool alreadyInList; 
foreach (var itm in lvCart.Items) 
{
     if (itm == item) 
     {
         alreadyInList = true; 
         break; 
     }

}
if(!alreadyInList)
{
      lvCart.Items.Add(new ListViewItem(new string[] { item, price, noi }));
}
4

3 回答 3

0

您需要分配alreadyInList,因为在您尝试在语句中使用它时它可能没有被分配if(因为您的代码路径链留下了变量没有被及时分配的可能性):

bool alreadyInList; 

或使用 linq:

bool alreadyInList = lvCart.Items.Any(itm => item == itm);

C# 编译器通常很擅长告诉你哪里出了问题,你只需要注意它。

于 2014-02-18T17:29:47.387 回答
0

其他人已经说过如何避免明确的分配问题。局部变量在第一次读取之前总是需要明确分配。

但是,无论如何,我建议使用 LINQ 来简化代码:

bool alreadyInList = lvCart.Items.Contains(item);

(根据 的类型Items,您可能需要类似的东西lvCart.Items.Cast<SomeType>().Contains(item)。)

于 2014-02-18T17:31:45.757 回答
0

错误很清楚。如果您的 if 语句未执行,您的变量将永远不会被分配。在定义它时给它一个默认值

bool alreadyInList = false;
于 2014-02-18T17:30:09.533 回答