gpt4 book ai didi

c# - 如何从嵌套的 try-catch block 中重新抛出先前的异常? (C#)

转载 作者:可可西里 更新时间:2023-11-01 08:26:04 26 4
gpt4 key购买 nike

我有尝试进行类型转换的代码。如果失败,我想尝试其他方法,如果同样失败,则重新抛出第一次转换尝试的原始异常。问题是我知道重新抛出的唯一方法是将“throw;”放在 catch block 的末尾。当我只希望从另一个 catch block 中重新抛出时会发生什么?

try 
{
valueFromData = Convert.ChangeType(valueFromData, pi.PropertyType);
}
catch(InvalidCastException e)
{
Debug.WriteLine(String.Concat("Info - Direct conversion failed. Attempting to convert using String as an intermidiate type."));
try { valueFromData = Convert.ChangeType(valueFromData.ToString(), pi.PropertyType); }
catch { throw e; }
}

正如您在上面看到的,我必须使用“throw e;”,resets调用栈。

到目前为止,我唯一的解决方法是(imo)恶心:

bool handled = true;
...
catch { handled = false; }
if( !handled ) throw;

最佳答案

无法从 inner catch block 内的外部 catch block 重新抛出异常。实现这种模式最好的方法是注意内部操作是否成功

catch (InvalidCastException e) {
bool threw = false;
try {
...
} catch {
threw = true;
}
if (threw) {
throw;
}
}

关于c# - 如何从嵌套的 try-catch block 中重新抛出先前的异常? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7890461/

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