3

我扩展了 NLog 以记录 Exception.Data 集合中的所有项目。因此,当我在我的数据访问代码中捕获 SqlException 时,我喜欢向 Exception.Data 字典中添加一些项目以提供更好的日志记录。我并不总是想从捕获中记录,而是让异常冒泡并在以后处理。所以我写了这样的东西:

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

呼叫只是Throw而不是Throw exception仍然有我添加的所有数据项吗?

4

2 回答 2

4

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

于 2012-10-19T18:33:30.403 回答
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

它起作用并吐出“它就在那里”。

于 2012-10-19T18:33:10.337 回答