我有以下模式:
private void MyFunction()
{
doStuff();
if (problem())
{
cleanup();
return;
}
doMoreStuff();
if (otherProblem())
{
cleanup();
return;
}
doYetMoreStuff();
}
错误清除代码重复。消除这种情况的明显方法是:
private void MyFunction()
{
try {
doStuff();
if (problem()) throw new MyException();
doMoreStuff();
if (otherProblem()) throw new MyException();
doYetMoreStuff();
}
catch (MyException)
{
cleanup();
return;
}
}
但是,错误情况并不是真正的异常 - 这是一个 ASP.Net 页面,查询字符串中的数据错误或没有数据将触发错误情况。异常似乎是消除错误处理重复数据并将其与主代码分离的最明显方法,但据我了解,公认的最佳做法是不要像这样对控制流使用异常。
这样做的习惯做法是什么?
最佳答案
在非异常情况下使用异常并不是一个好主意,尤其是在同一方法中抛出和捕获异常时。更好的方法是使用指示需要清理的 bool 变量,并在 finally
block 内执行清理。
var needsCleanup = true;
try {
doStuff();
if (problem()) return;
doMoreStuff();
if (otherProblem()) return;
doYetMoreStuff();
needsCleanup = false;
} finally {
if (needsCleanup) {
cleanup;
}
}
关于c# - 使用异常处理错误流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11345454/