将数据项添加到异常中但不调用throw ex

3

我扩展了NLog以记录所有异常数据集合中的项目。因此,在我的数据访问代码中捕获SqlException时,我喜欢向Exception.Data字典中添加一些项目以提供更好的日志记录。我不总是想从catch中记录日志,而是让异常上升并稍后处理。因此,我会编写类似以下内容的代码:

Try
   ...
Catch exception As Exception
   exception.Data.Add("SP", StoreProcedureNameCost)
   exception.Data.Add("Connection", myConnection.ConnectionString)
   Throw
End Try

如果只调用 Throw 而不是 Throw exception,那么我的所有添加的 Data 项是否仍然存在?


2
在你的编译器中尝试这个应该很容易... - driis
Downvoter,请问您为什么要点踩? - slolife
2个回答

4

是的,它将保留对Data属性所做的更改。 "throw" 和 "throw ex" 之间的根本区别在于,使用 "throw" 调用时堆栈跟踪不会改变,而使用 "throw ex" 则会改变堆栈跟踪。


1

我自己尝试了一下,它的效果就像我希望的那样。只需调用throw即可保留添加到异常中的新数据:

Try
   Try
      Throw New NotImplementedException("Hi")
   Catch ex As Exception
      ex.Data.Add("Here", "It is there")
      Throw
   End Try
Catch ex As Exception
   Dim msg As String = ex.Data("Here").ToString()
   Response.Write(msg)
End Try

它运行正常并输出了“它在那里”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接