Visual studio检测代码返回路径失败
本文关键字:返回路径 失败 代码 检测 studio Visual | 更新日期: 2023-09-27 18:09:06
我在重构一些代码时遇到的问题,也许我是盲目的,但我没能看到为什么下面的代码不能工作。
public bool Foo()
{
try
{
return SomeFunctionMightThrow();
}
catch (Exception ex)
{
Logger.log(ex);
throw ex;
}
}
到目前为止一切顺利,如果我将代码重构为
public bool Foo()
{
try
{
return SomeFunctionMightThrow();
}
catch (Exception ex)
{
LogAndThrow(ex);
}
}
private void LogAndThrow(Exception ex)
{
Logger.log(ex);
throw ex;
}
代码现在无法编译
你可以把它改成…
public bool Foo()
{
try
{
return SomeFunctionMightThrow();
}
catch (Exception ex)
{
// note: this will reset the exception stack trace
throw LogAndReturnException(ex);
}
}
private Exception LogAndReturnException(Exception ex)
{
Logger.log(ex);
return ex;
}
这实际上就是你想要的,但给了VS代码返回路径。
或者使用更简单的方法来保留堆栈跟踪,只需将catch更改为:
catch (Exception ex)
{
Log(ex);
throw; // retains stack trace
}
编译器没有考虑到你的LogAndThrow()
方法总是会抛出一个异常——在这种情况下,Foo()
中的所有代码路径必须返回一个布尔值,所以你可以只需这样做:
public bool Foo()
{
try
{
return SomeFunctionMightThrow();
}
catch (Exception ex)
{
LogAndThrow(ex);
return false; //will never get here
}
}
在一般情况下,因为你抛出无论如何,我建议使用try/catch
块在一个单一的中心点在你的应用程序的日志记录,即在最高级别,除非你可以真正处理异常-它看起来不像你在这里。