当捕获异常并重新抛出它们时,最好的做法是什么?我想确保Exception对象的InnerException和堆栈跟踪被保留.以下代码块在处理方式上是否存在差异?

try
{
    //some code
}
catch (Exception ex)
{
    throw ex;
}

VS:

try
{
    //some code
}
catch
{
    throw;
}

推荐答案

保留堆栈跟踪的方法是通过使用throw;,这也是有效的

try {
  // something that bombs here
} catch (Exception ex)
{
    throw;
}

throw ex;基本上类似于从该点引发异常,因此堆栈跟踪只会到达发出throw ex;语句的位置.

假设异常允许您传递异常(推荐),Mike也是正确的.

Karl Seguin在他的foundations of programming e-book中也有great write up on exception handling分,这是一个很棒的读物.

编辑:Foundations of Programming pdf的工作链接.只需在文本中搜索"例外".

.net相关问答推荐

Docker镜像mcr.microsoft.com/dotnet/aspnet:8.0不能在Windows上构建

EFCore.DbSet.Update 方法添加新行而不是更新它

Puppeteer LaunchAsync 在未打开浏览器的情况下挂起

在 Invoke() 中运行时,跨线程操作对表单控件无效 - .NET

等待时 Blazor 服务器按钮刷新

在生产中使用实体框架(代码优先)迁移

如何在 C# 中创建表达式树来表示String.Contains("term")?

DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") 返回上午时间而不是下午时间?

X509Certificate 构造函数异常

C#中的引用类型

Find() 和 First() 抛出异常,如何改为返回 null?

让 String.Replace 只打整个单词的方法

从 C# 中的字符串中删除最后一个字符.优雅的方式?

ConcurrentDictionary TryRemove 何时返回 false

使用+运算符的字符串连接

使用 lambda 表达式代替 IComparer 参数

如何使用 EPPlus 设置 XLSX 单元格宽度?

Windows 服务在哪个目录中运行?

从 Visual Studio 2015 发布 - 允许不受信任的证书

如何使用匿名方法返回值?