C# 循环内的异常处理。为什么这段代码给出了一个“并非所有代码路径都返回值”错误?
我的目标是.NET4.0并使用VS2012。代码只是一个示例。在C# 循环内的异常处理。为什么这段代码给出了一个“并非所有代码路径都返回值”错误?,c#,C#,我的目标是.NET4.0并使用VS2012。代码只是一个示例。在while循环之后,您不会返回任何内容 不确定此方法用于什么,但我建议使用Int32.TryParse()代替此实现。在catch块内的if块中没有返回语句。因此,假定循环体将执行。这意味着while条件也会执行,因此编译器假定它可以返回false。这意味着语句后面还必须有一个返回,而语句编译器不能绝对判断一段代码是否最终会返回值。请看下面的例子,以了解难度 如果像这样重新构造代码,它的行为应该相同,但会修复错误: public s
while
循环之后,您不会返回任何内容
不确定此方法用于什么,但我建议使用
Int32.TryParse()
代替此实现。在catch
块内的if
块中没有返回语句。因此,假定循环体将执行。这意味着while
条件也会执行,因此编译器假定它可以返回false。这意味着语句后面还必须有一个返回,而语句编译器不能绝对判断一段代码是否最终会返回值。请看下面的例子,以了解难度
如果像这样重新构造代码,它的行为应该相同,但会修复错误:
public static Boolean CanParseStringToInt(String s)
{
Boolean retry = false;
int n = 0;
do
{
try
{
n = int.Parse(s);
return true;
}
catch (Exception ex)
{
if (!retry)
{
retry = true;
}
else
{
return false;
}
}
}
while (retry);
}
在catch中,else条件返回,但如果不返回,则执行赋值。在你的时间之外也没有回报
public static Boolean CanParseStringToInt(String s)
{
Boolean retry = false;
int n = 0;
do
{
try
{
n = int.Parse(s);
return true;
}
catch
{
if (!retry)
{
retry = true;
}
else
{
break;
}
}
}
while (retry);
return false;
}
一般来说,我更喜欢编写如下重试逻辑
catch (Exception ex)
{
if (!retry)
{
retry = true;
}
else
{
return false;
}
}
for(int i=0;i
另外,再次查看代码后,您似乎正在编写int.TryParse(字符串输入,out int输出)
编译器不够聪明,无法知道您最终将返回到循环中
我会在方法末尾添加这一行:
for (int i = 0; i < retries; i++)
{
try
{
//do stuff that could throw
}
catch (Exception e)
{
Thread.Sleep(500);
if (i == retries - 1)
{
throw new Exception(e.Message);
}
}
}
该方法的使用与此无关,只是为了说明目的。
throw new InvalidOperationException("Should not have reached here.");