c#并非所有代码路径都返回值错误

时间:2013-07-12 13:49:45

标签: c# .net function stringbuilder

我使用此代码在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");
    }
}                     

3 个答案:

答案 0 :(得分: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
    }

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

答案 1 :(得分: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;
}

答案 2 :(得分:4)

这怎么可以工作?您的方法返回类型Expr,但您在每个if语句中返回不同的类型。

问题是你错过了这个区块中的return

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

您也应该在此方法结束时添加一个返回值。