首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在c# .net中抛出和抛出ex的区别

在c# .net中抛出和抛出ex的区别
EN

Stack Overflow用户
提问于 2014-02-13 22:05:09
回答 2查看 30.1K关注 0票数 12

有人能简单地告诉我throwthrow ex的区别吗?我读到throw存储以前的异常,但没有得到这一行。

我可以用例子简要地说明一下吗?

EN

回答 2

Stack Overflow用户

发布于 2014-02-13 22:21:20

是- throw重新抛出捕获的异常,并保留堆栈跟踪。throw ex抛出相同的异常,但将堆栈跟踪重置为该方法。

除非您想要重置堆栈跟踪(即保护公共调用者不受库的内部工作的影响),否则throw通常是更好的选择,因为您可以看到异常是从哪里产生的。

我还想提一下“直通”catch块:

代码语言:javascript
运行
复制
try
{
   // do stuff
}
catch(Exception ex)
{
    throw;
}

是毫无意义的。这是完全相同的行为,就好像根本没有try/catch一样。

票数 29
EN

Stack Overflow用户

发布于 2014-02-13 22:22:23

抛出将重新抛出原始异常;

抛出ex将创建一个新的异常,因此堆栈跟踪会发生变化。通常没有什么意义,通常你应该直接抛出,或者创建一个新的异常并抛出它,例如

代码语言:javascript
运行
复制
// not a great code, demo purposes only
try{
File.Read("blah");
}
catch(FileNotFoundException ex){
throw new ConfigFileNotFoundException("Oops", ex);
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21756461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档