1

我在 c# 中收到以下错误,此代码“并非所有代码路径都返回值”我正在尝试使用它创建一种编程语言。任何帮助是极大的赞赏。

private Expr ParseExpr()
{
    if (this.index == this.tokens.Count)
    {
        throw new System.Exception("expected expression, got EOF");
    }
    if (this.tokens[this.index] is Text.StringBuilder)
    {
        string Value = ((Text.StringBuilder)this.tokens[this.index++]).ToString();
        StringLiteral StringLiteral = new StringLiteral();
        StringLiteral.Value = Value;
    }
    else if (this.tokens[this.index] is int)
    {
        int intvalue = (int)this.tokens[this.index++];
        IntLiteral intliteral = new IntLiteral();
        intliteral.Value = intvalue;
        return intliteral;    
    }
    else if (this.tokens[this.index] is string)
    {
        string Ident = (string)this.tokens[this.index++];
        Variable var = new Variable();
        var.Ident = Ident;
        return var;
    }
    else
    {
        throw new System.Exception("expected string literal, int literal, or variable");
    }
}                     
4

3 回答 3

9

您忘记在那里返回值:

 if (this.tokens[this.index] is Text.StringBuilder)
    {
        string Value = ((Text.StringBuilder)this.tokens[this.index++]).ToString();
        StringLiteral StringLiteral = new StringLiteral();
        StringLiteral.Value = Value;
        //return Anything
    }

您还应该在函数结束时返回值。

于 2013-07-12T13:51:08.723 回答
5

如果出现以下情况,您第二次忘记返回任何内容:

if (this.tokens[this.index] is Text.StringBuilder)
{
    string Value = ((Text.StringBuilder)this.tokens[this.index++]).ToString();
    StringLiteral StringLiteral = new StringLiteral();
    StringLiteral.Value = Value;
    return StringLiteral;
}
于 2013-07-12T13:51:16.007 回答
4

这些怎么可能起作用?您的方法返回一个类型,但您在每个语句Expr中返回不同的类型。if

问题是您return在此块中缺少 a :

if (this.tokens[this.index] is Text.StringBuilder)
{
    string Value = ((Text.StringBuilder)this.tokens[this.index++]).ToString();
    StringLiteral StringLiteral = new StringLiteral();
    StringLiteral.Value = Value;
    return Value;
}

您也应该在此方法的末尾添加一个 return。

于 2013-07-12T13:55:24.123 回答