为什么价值不归还?

时间:2013-11-04 20:15:51

标签: c# .net return

不确定我为什么会收到此错误...这是方法(我相信我会返回所有必要的值)。有没有人知道我在语法方面缺少什么,或者你认为问题比这个堆栈跟踪更大吗?

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;
    }

3 个答案:

答案 0 :(得分:3)

您必须确保您的方法沿每个可能的代码路径返回一个值。在您的方法中,如果line0 != null它将通过最后if块而没有任何值返回。

解决此问题的最简单方法是在方法的最后添加return语句,如下所示:

public bool equals(Object obj)
{
    ...

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

答案 1 :(得分:1)

您没有在最后一行返回值。

您有一系列返回值的if语句。如果这些表达式都不是真的,那么执行流程将落到方法的末尾,在那里你没有返回。

答案 2 :(得分: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) {打开不正确的嵌套 1 。如果使用逻辑运算符在单个if..return false构造中对多个条件进行分组,则可以进一步看到这一点。

这些更改应该使“丢失的返回”(这是错误的原因)很容易找到。


1 我建议 是所提出代码的核心问题,因为return true 条件块和因此存在没有返回的执行路径。


此外,请确保实际覆盖bool Equals(object)。上述equals的情况有所不同,因此不会覆盖所述方法。