Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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
C# 重新引用ex.InnerException是个坏主意?_C#_Exception_Reflection - Fatal编程技术网

C# 重新引用ex.InnerException是个坏主意?

C# 重新引用ex.InnerException是个坏主意?,c#,exception,reflection,C#,Exception,Reflection,基本上,我的问题很简短:以下是一个坏主意吗(封装并重新引用ex.InnerException而不是ex) (有一个类似的问题,但不完全是……我想重新封装InnerException,这样就可以保留堆栈跟踪,而不反映内部) 下面的stacktrace看起来完好无损(好吧,它没有反射如何调用方法的内部结构),所以这有问题吗?为了让下面的stacktrace有意义,我的继承层次是: -Oxide.Net.Rpc.RpcProvider |-Oxide.Net.Rpc.XmlRpc |-Start

基本上,我的问题很简短:以下是一个坏主意吗(封装并重新引用ex.InnerException而不是ex)

(有一个类似的问题,但不完全是……我想重新封装InnerException,这样就可以保留堆栈跟踪,而不反映内部)

下面的stacktrace看起来完好无损(好吧,它没有反射如何调用方法的内部结构),所以这有问题吗?为了让下面的stacktrace有意义,我的继承层次是:

-Oxide.Net.Rpc.RpcProvider |-Oxide.Net.Rpc.XmlRpc |-StartMenuSorter.DesktopMasters (sanitised to protect the innocent, ie. me) at Oxide.Net.Rpc.XmlRpc.DoRequest(Uri rpcConnectionUri, IXPathNavigable request, String userAgent) in \Projects\OxideLib\Oxide.Net\Rpc\XmlRpc.cs:line 243 at StartMenuSorter.DesktopMasters.GetIconInformation(IEnumerable`1 icons) in \Projects\StartMenuSorter\StartMenuSorter\DesktopMasters.cs:line 17 at Oxide.Net.Rpc.RpcProvider.CallMethod(String methodName, Object[] parameters) in \Projects\OxideLib\Oxide.Net\Rpc\RpcProvider.cs:line 52 at StartMenuSorter.Program.Main() in \Projects\StartMenuSorter\StartMenuSorter\Program.cs:line 36 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() -Oxide.Net.Rpc.RpcProvider |-Oxide.Net.Rpc.XmlRpc |-StartMenuSorter.DesktopMasters (经过消毒以保护无辜者,即我) 在\Projects\OxideLib\Oxide.Net\Rpc\XmlRpc.cs中的Oxide.Net.Rpc.XmlRpc.DoRequest(Uri rpcConnectionUri,IXPathNavigable请求,字符串userAgent):第243行 在\Projects\StartMenuSorter\StartMenuSorter\DesktopMasters.GetIconInformation(IEnumerable`1图标)中的\Projects\StartMenuSorter\DesktopMasters.cs:第17行 在\Projects\OxideLib\Oxide.Net\Rpc\RpcProvider.cs中的Oxide.Net.RpcProvider.CallMethod(String methodName,Object[]参数)处:第52行 在\Projects\StartMenuSorter\StartMenuSorter\Program.cs中的StartMenuSorter.Program.Main()处:第36行 位于System.AppDomain.\u nexecutestAssembly(程序集,字符串[]args) 位于System.AppDomain.ExecuteAssembly(字符串汇编文件、证据汇编安全性、字符串[]args) 在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()上 位于System.Threading.ThreadHelper.ThreadStart\u上下文(对象状态) 在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态) 位于System.Threading.ThreadHelper.ThreadStart()处
我以前做过这件事;它对我来说非常有效,基本上与您在示例中使用的形式相同。

我认为这没有问题。您基本上是接受一种类型的异常并将其转换为更有意义的异常。我相信在这种情况下,这是一种很好的方法。

看起来完全合理:stacktrace包含RpcProvider调用方法的详细信息,并隐藏了血淋淋和不必要的反射gubbins,所以您很好

与所有错误处理代码一样,最终的使用者将是其他开发人员,因此最好询问“如果出现问题,我是否有足够的细节自己调试?”

由于没有太多的噪音,就好像抛出了外部异常一样,该技术很好地完成了它的工作

-Oxide.Net.Rpc.RpcProvider |-Oxide.Net.Rpc.XmlRpc |-StartMenuSorter.DesktopMasters (sanitised to protect the innocent, ie. me) at Oxide.Net.Rpc.XmlRpc.DoRequest(Uri rpcConnectionUri, IXPathNavigable request, String userAgent) in \Projects\OxideLib\Oxide.Net\Rpc\XmlRpc.cs:line 243 at StartMenuSorter.DesktopMasters.GetIconInformation(IEnumerable`1 icons) in \Projects\StartMenuSorter\StartMenuSorter\DesktopMasters.cs:line 17 at Oxide.Net.Rpc.RpcProvider.CallMethod(String methodName, Object[] parameters) in \Projects\OxideLib\Oxide.Net\Rpc\RpcProvider.cs:line 52 at StartMenuSorter.Program.Main() in \Projects\StartMenuSorter\StartMenuSorter\Program.cs:line 36 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()