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");
}
}
您忘记在那里返回值:
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。