编译器抱怨以下代码片段不会总是返回。我已经检查过了,没有看到问题。
private int MyFunction(int b)
{
int result = -1;
while (result != 1)
{
result = MySmallFunction(out var x);
if (result == 1)
{
return x;
}
}
}
private int MySmallFunction(out int x)
{
x = 1;
return 1;
}
MySmallFunction
进行填充并返回一个代码,1
表示成功,其余为错误代码。
如果返回1
,则表示out int x
有一个值。
如果返回值不是1
(错误代码),那么我想重试。
如果MySmallFunction
从不返回1
,则应用程序应该永远陷入循环。对于编译器来说这应该不是问题。
答案 0 :(得分:1)
我将函数重写为此:
private int MyFunction()
{
int result = -1;
int x = int.MinValue;
while (result != 1)
{
result = MySmallFunction(out x);
}
return x;
}
private int MySmallFunction(out int x)
{
x = 1;
return 1;
}
现在,x
仅在MySmallFunction
返回状态代码1
时返回。
答案 1 :(得分:0)
根据方法MyFunction()
的签名,在所有情况下都应向调用方法返回一个值。但在您的情况下,您仅返回if (result == 1)
的值,而在其他所有情况下该值都是无效的,因此您必须在最后添加一个返回值,这将返回一个整数。因此,您必须更改以下内容:
private int MyFunction(int b)
{
int result = -1;
while (result != 1)
{
result = MySmallFunction(out var x);
if (result == 1)
{
return x;
}
}
return 0;
}
答案 2 :(得分:0)
如果您的while循环没有触发,没有返回指令,那么您需要在while循环之外的函数底部返回一个值。