gpt4 book ai didi

c# - 避免嵌套 try catch block 的模式?

转载 作者:IT王子 更新时间:2023-10-29 03:34:29 26 4
gpt4 key购买 nike

考虑这样一种情况,我有三种(或更多)执行计算的方法,每种方法都可能因异常而失败。为了尝试每次计算直到找到成功的计算,我一直在执行以下操作:

double val;

try { val = calc1(); }
catch (Calc1Exception e1)
{
try { val = calc2(); }
catch (Calc2Exception e2)
{
try { val = calc3(); }
catch (Calc3Exception e3)
{
throw new NoCalcsWorkedException();
}
}
}

是否有任何公认的模式可以更好地实现这一点?当然,我可以将每个计算都包装在一个失败时返回 null 的辅助方法中,然后只使用 ?? 运算符,但是有没有一种更通用的方法(即不必编写我想使用的每种方法的辅助方法)?我考虑过使用泛型编写一个静态方法,它将任何给定方法包装在 try/catch 中并在失败时返回 null,但我不确定我将如何去做。有什么想法吗?

最佳答案

尽可能不要将异常用于控制流或非异常情况。

但要直接回答您的问题(假设所有异常类型都相同):

Func<double>[] calcs = { calc1, calc2, calc3 };

foreach(var calc in calcs)
{
try { return calc(); }
catch (CalcException){ }
}

throw new NoCalcsWorkedException();

关于c# - 避免嵌套 try catch block 的模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7796420/

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