Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 向异常添加数据项,但不调用throw-ex_.net_Vb.net_Exception - Fatal编程技术网

.net 向异常添加数据项,但不调用throw-ex

.net 向异常添加数据项,但不调用throw-ex,.net,vb.net,exception,.net,Vb.net,Exception,我已扩展NLog以记录Exception.Data collection中的所有项。因此,当我捕获到一个SqlException时,在我的数据访问代码中,我喜欢向Exception.data字典添加一些项目,以提供更好的日志记录。我并不总是想从catch中记录日志,而是让异常冒泡起来,稍后再处理。所以我写了这样的东西: Try ... Catch exception As Exception exception.Data.Add("SP", StoreProcedureNameCos

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

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

调用just
Throw
而不是
Throw exception
是否仍然有我添加的所有数据项?

我自己尝试了一下,它的工作原理与我所希望的一样。仅调用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

它工作了,并吐出“它在那里”。

是的,它将保留对数据属性所做的更改。
throw
throw ex
之间的根本区别在于,堆栈跟踪不会随着调用
throw
而改变,而堆栈跟踪会随着
throw ex
而改变,这很容易在编译器中尝试……Downvoter,Downvoter是用来做什么的?