2014-10-09 191 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说(局部变量)INT测试错误:未分配的局部变量“测试”的使用

+3

你有没有'return'声明该函数 – UnholySheep 2014-10-09 22:35:56

+0

Anywhere还,当你有一场比赛时,你应该'摆脱'循环。 – 2014-10-09 22:36:31

+0

当我使用'return test'时,它显示'(局部变量)int test' – Meh 2014-10-09 22:37:52

回答

3

你有几个问题 - 首先,你需要分配一个初始值为test,因为不能保证你甚至会输入for循环。这是你的错误的来源。第二,如果你有一个匹配,你可能想要返回0 - 即代码被写入的方式,即使找到匹配,它也会返回-1,除非列表中的最后一项是匹配项。您可能更适合简单地返回找到匹配的时刻,无需迭代剩余的项目,甚至不需要本地变量分配。

试试这个:

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为假。此代码使用这两个值的非常不寻常的表示,每个值都减1.但是,在C#中,您最好使用“bool”而不是int。 – Magus 2014-10-09 22:49:32

+0

同意,布尔会更好。 – 2014-10-09 22:51:17

+0

谢谢@Steven Hansen! – Meh 2014-10-09 22:51:21