gpt4 book ai didi

c# - 在 catch 子句中尝试 catch

转载 作者:太空宇宙 更新时间:2023-11-03 17:30:54 30 4
gpt4 key购买 nike

我目前正在以不同的方式加载图像,如下所示:

try {
// way 1
}
catch
{ // way 1 didn't work
try {
// way 2
}
catch
{
// etc.
}
}

我想知道是否有更清洁的方法来做到这一点。目前这不是问题,但如果我添加更多方法,它会变得一团糟。
请注意,加载图像的方法也以相同的方式在 try catch 中,因为它可能不是图像。
它基本上是在尝试一堆东西来弄清楚你拖到应用程序中的是什么。

最佳答案

您可以编写一个接受任意数量的委托(delegate)的方法,尝试所有委托(delegate)并在其中一个成功运行后停止。这将异常处理抽象到一个地方,并避免了所有的重复:

public static void AttemptAll(params Action[] actions)
{
var exceptions = new List<Exception>();
foreach (var action in actions)
{
try
{
action();
return;
}
catch (Exception e)
{
exceptions.Add(e);
}
}
throw new AggregateException(exceptions);
}

这允许您编写:
AttemptAll(Attempt1, Attempt2, Attempt3);

如果方法计算结果,您也可以创建第二个重载来处理它:
public static T AttemptAll<T>(params Func<T>[] actions)
{
var exceptions = new List<Exception>();
foreach (var action in actions)
{
try
{
return action();
}
catch (Exception e)
{
exceptions.Add(e);
}
}
throw new AggregateException(exceptions);
}

关于c# - 在 catch 子句中尝试 catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26592667/

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