gpt4 book ai didi

c# - 抛出异常而不是处理返回

转载 作者:行者123 更新时间:2023-11-30 15:52:35 24 4
gpt4 key购买 nike

我正在尝试重构一英里长的方法,并考虑是否抛出 ReturnException 而不是调用返回。看我的例子:

当前英里长的代码如下所示:

  public void MyMileLongMethod()
{
//some logic
//some more logic

if (a == 10 && (b == "cool" || b == "super cool"))
{
//logic here
//more logic
//15 more lines of code.
return;
}

if (x && y || z==5)
{
//logic here
//more logic
//20 more lines of code.
return;
}
//more conditions like this that calls a return
// probable more logic here
}

我想用以下方式重构它:

    public void MyRefactoredMethod()
{
try
{
DoLogic1(parameters);

ConditionOneMethod(parameters);

ConditionTwoMethod(parameters);

//more methods like above that throws a ReturnException
// probable more logic here
}
catch (ReturnException)
{
return;
}
}
void DoLogic1(parameters)
{
//some logic
//some more logic
}

void ConditionOneMethod(parameters)
{
if (a == 10 && (b == "cool" || b == "super cool"))
{
//logic here
//more logic
//15 more lines of code.
throw new ReturnException();
}
}

void ConditionTwoMethod(parameters)
{
if (x && y || z == 5)
{
//logic here
//more logic
//20 more lines of code.
throw new ReturnException();
}
}

问题:抛出异常并在调用的方法中捕获它,然后在捕获中调用返回是一种好的做法吗?如果,那么有一个常用的模式名称吗?如果这不是一个好的做法,还有其他方法吗?还是我下面的解决方案就是答案?

我的另一个解决方案是,检查外部方法中的条件,然后调用执行逻辑的方法,然后调用返回,但在我看来,外部方法中有很多代码。

最佳答案

我会赞成使用这种变体:

private void MyRefactoredMethod(...) {
...
if (...)
return; // was "continue;"
...
if (!ConditionOneMethod(...))
return;
...
}

private boolean ConditionOneMethod(...) {
...
if (...)
return false; // was a continue from a nested operation
...
return true;
}

关于c# - 抛出异常而不是处理返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54122888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com