2014-02-18 1 views
0

Я пытаюсь сравнить, если элемент уже существует в listview.
Он говорит:Использование непризнанной локальной переменной при добавлении элемента в listview

Использование неназначенную локальной переменной «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 })); 
} 
+0

возможный дубликат [Использования не назначенной локальной переменной 'flag'] (http://stackoverflow.com/questions/3384939/use-of-unassigned-local-variable-flag) – neminem

ответ

0

Вам нужно назначить alreadyInList, потому что он не может быть назначено к тому времени, вы пытаетесь использовать его в if (потому что ваша цепочка кодовых путей оставляет возможность того, что переменная не назначается по времени):

bool alreadyInList; 

Или с помощью LINQ:

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

C# компилятор, как правило, очень хорошо говорю вам, что это не так, вы просто должны обратить на это внимание.

0

Ошибка довольно clear.If ваш, если оператор не выполняется переменная никогда не будет assigned.Give это значение по умолчанию при определении его

bool alreadyInList = false; 
0

Другие говорили, как вы можете избежать проблемы определенного присваивания , Локальные переменные всегда должны быть обязательно назначены до их первого чтения.

Однако, я предложил бы использовать LINQ, чтобы сделать код проще в любом случае:

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

(в зависимости от типа Items, вам может понадобиться что-то вроде lvCart.Items.Cast<SomeType>().Contains(item).)