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

本文关键字:路径 返回值 错误 代码 | 更新日期: 2023-09-27 18:22:10

我在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");
    }
}                     

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

您忘记在那里返回值:

 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
    }

您还应该在函数末尾返回值。

您忘记在第二个if中返回任何内容:

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

这些怎么能起作用?方法返回类型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;
}

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