我使用此代码在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");
}
}
答案 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;
}
您也应该在此方法结束时添加一个返回值。