2014-10-09 203 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