2013-11-04 31 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在不同的情况下不同,因此不覆盖所述方法。

相关问题