gpt4 book ai didi

c# - 为什么C#编译器在catch中授权 "throw ex",有没有 "throw ex"有用的情况?

转载 作者:太空狗 更新时间:2023-10-29 20:49:12 25 4
gpt4 key购买 nike

在 C# 中,年轻的开发人员经常使用“throw ex”而不是“throw”来向父方法抛出异常。

示例:

try
{
// do stuff that can fail
}
catch (Exception ex)
{
// do stuff
throw ex;
}

“throw ex”是一种不好的做法,因为堆栈跟踪在失败的方法下方被截断了。所以调试代码比较困难。所以代码必须是:

try
{
// do stuff that can fail
}
catch (Exception ex)
{
// do stuff
throw;
}

我的问题是为什么编译器会授权这个(或者不显示警告消息?)是否存在“throw ex”有用的情况?

最佳答案

Is there a case which "throw ex" is useful ?

当然 - 有时您想要截断堆栈跟踪 - 以避免暴露实现细节等。其他时候您可能想要抛出一个异常,这意味着编译器必须区分只是重新抛出捕获的异常和抛出新异常。

那么为什么您希望编译器阻止您做一些 1) 不违法且 2) 可能有用的事情?

关于c# - 为什么C#编译器在catch中授权 "throw ex",有没有 "throw ex"有用的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24677726/

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