2014-10-09 6 views
-2

я не могу найти ошибку в этом коде:ошибка при возврате значения

private int existb1b2(Bill b1, ArtQty artQty) 
     { 
      int test; 
      for(int i = 0; i < b1.ArtQty.Count(); i++) 
      { 
       if (b1.ArtQty[i].Article.Name == artQty.Article.Name) 
        test = 0; 
       else 
        test = -1; 
      } 
      return test; 
     } 

return test говорит (локальная переменный) ИНТ тест ошибка: Использование неназначенного локального переменного «теста»

+3

у вас нет 'return' заявления где-нибудь в этой функции – UnholySheep

+0

Кроме того, вы должны «вырваться» из цикла, когда у вас есть совпадение. –

+0

Когда я использую 'return test', он показывает' (локальная переменная) int test' – Meh

ответ

3

Вы есть пара проблем - во-первых, вам нужно присвоить значение инициализации test, потому что нет гарантии, что вы даже войдете в цикл for. Это источник вашей ошибки.

Во-вторых, вы, вероятно, захотите вернуть 0, если у вас есть совпадение - способ написания кода, он действительно вернет -1, даже если совпадение найдено, если только элемент LAST в вашем списке не соответствует. Вам, вероятно, лучше просто вернуть момент поиска совпадения, нет необходимости повторять итерацию остальных элементов, и никакое локальное назначение переменных даже не требуется.

Попробуйте это:

private int existb1b2(Bill b1, ArtQty artQty) 
{ 
    for (int i = 0; i < b1.ArtQty.Count(); i++) 
    { 
     if (b1.ArtQty[i].Article.Name == artQty.Article.Name) return 0; 
    } 
    return -1; 
} 

Или если вы просто хотите, чтобы исправить ошибки компиляции, вы можете изменить свою int test; строки int test = -1;

+0

Дополнительное возможное улучшение: на большинстве языков 1 истинно, а 0 - false. Этот код использует очень необычное представление этих двух значений, вычитая каждый на 1. Однако в C# вы идеально использовали бы 'bool', а не int. – Magus

+0

Согласен, bool будет лучше. –

+0

Спасибо @ Сетвен Хансен! – Meh

Смежные вопросы