C#错误消息:并非所有代码路径都返回值

时间:2014-01-18 16:58:06

标签: c#

我的代码用于搜索二叉树以获得相同的值。

对我而言,它正在返回一个值。

任何想法/帮助?

public Boolean ContainsValue (Node<T> tree, int value)
{
    if (tree == null)
        return false;

    if (tree.Data.Equals(value))
        return true;

    if (value.CompareTo(tree.Data) < 0)
        return ContainsValue(tree.Left, value);

    if (value.CompareTo(tree.Data) > 0)
        return ContainsValue(tree.Right, value);
}
编辑:谢谢,一旦你们都提到了这个问题,我就意识到我做错了什么。 (我现在觉得很傻)

2 个答案:

答案 0 :(得分:4)

如果没有条件满足,则需要默认(无条件)返回:

public Boolean ContainsValue (Node<T> tree, int value)
{
    if (tree == null)
        return false;

    if (tree.Data.Equals(value))
        return true;

    if (value.CompareTo(tree.Data) < 0)
        return ContainsValue(tree.Left, value);

    if (value.CompareTo(tree.Data) > 0)
        return ContainsValue(tree.Right, value);

    // here
    // return some_value;
    // or throw exception
}

我认为您的代码应如下所示:

public bool ContainsValue (Node<T> tree, int value)
{
    if (tree == null)
        return false;

    if (tree.Data.Equals(value))
        return true;

    if (value.CompareTo(tree.Data) < 0)
        return ContainsValue(tree.Left, value);

    // thus you already verified case when value is less or equal to data
    // you don't need if condition here
    return ContainsValue(tree.Right, value);
}

答案 1 :(得分:1)

您需要该方法的默认返回值。您唯一的返回值是在IF语句中,因此编译器会抱怨,即使我们作为人类可以看到至少会执行一个IF语句。