2013-11-04 30 views
0

不確定爲什麼我得到這個錯誤...這是方法(我相信我正在返回所有必要的值)。有沒有人知道我在語法上缺少什麼,或者你認爲這個問題比在這個堆棧跟蹤中更大?爲什麼一個值沒有被返回?

public bool equals(Object obj) 
{ 
    if (this == obj) 
    { 
     return true; 
    } 

    if (obj == null) 
    { 
     return false; 
    } 

    if (GetType() != obj.GetType()) 
    { 
     return false; 
    } 

    AccountNumber anotherObj = (AccountNumber) obj; 

    if (failedCheckSum != anotherObj.failedCheckSum) 
    { 
     return false; 
    } 

    if (notValid != anotherObj.notValid) 
    { 
     return false; 
    } 

    if (line0 == null) 
    { 
     if (anotherObj.line0 != null) 
     { 
      return false; 
     } 
     else if (!line0.Equals(anotherObj.line0)) 
     { 
      return false; 
     } 

     if (line1 == null) 
     { 
      if (anotherObj.line1 != null) 
      { 
       return false; 
      } 
      else if (!line1.Equals(anotherObj.line1)) 
      { 
       return false; 
      } 
     } 

     if (line2 == null) 
     { 
      if (anotherObj.line2 != null) 
      { 
       return false; 
      } 
      else if (!line2.Equals(anotherObj.line2)) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 
+10

你會得到什麼錯誤? – Leon

+0

那麼,你不是在告訴我們錯誤是什麼,或者它是在哪條線上。我們不介意讀者。順便說一句,在方法中獲得所有這些明確的回報是不好的做法。最好設置一個變量,然後在最後有一個返回值。 – OldProgrammer

+0

您需要在最後一個語句之外再添加一個return語句 –

回答

1

您沒有在最後一行返回值。

您有一系列返回值的if語句。如果這些表達式都不是真的,那麼執行流將會落到方法的末尾,在那裏你沒有返回。

3

您必須確保您的方法沿着返回一個值,每個可能的代碼路徑。在你的方法中,如果line0 != null它將通過最後的if塊而沒有任何值返回。

來解決,這將是在你的方法的最後添加return聲明,這樣最簡單的方法:

public bool equals(Object obj) 
{ 
    ... 

    return false; // or true, depending on how you want it to behave 
} 
0

與建議,請通過和注重音符 - 這真的是否解決了這個問題。

考慮重寫所有的:

if (anotherObj.line1 != null) 
{ 
    return false; 
} 
else if (!line1.Equals(anotherObj.line1)) 
{ 
    return false; 
} 

使用object.Equals(object,object)。然後,它看起來更像是:

if (!object.Equals(line1, anotherObj.line1)) { 
    return false; 
} 

使這種變化也表明if (line0 == null) {開闢了一個不正確嵌套 。如果使用邏輯運算符將單個if..return false構造中的多個條件分組,則可以進一步看出這一點。

這些更改應該使「找不到返回」(這是導致錯誤的原因)很容易找到。


我建議,這種的核心問題與所呈現的代碼作爲return true內部是條件塊,因此存在沒有返回的執行路徑。


此外,確保實際上覆蓋bool Equals(object)。上述equals在不同的情況下不同,因此不覆蓋所述方法。

相關問題