Ada*_*rth 24 .net c# exception-handling .net-remoting
我希望这很简单.我在一个大的代码库上工作,总体质量很好,但偶尔你会得到一些:
try
{
// Calls a .NET remoting method.
}
catch
{
throw;
}
Run Code Online (Sandbox Code Playgroud)
注意,没有最终的逻辑,catch没有指定任何异常或做除了我上面提供的任何其他操作.但是,我知道捕获和重新抛出可以改变异常细节中的调用堆栈.我不确定的是,这种行为是否特别是因为.NET远程调用.
删除这个try-catch是否安全?据我所知,它是,但我想我会先检查一下所有奇怪的行为.
Jon*_*eet 22
重新抛出,你已经证明它不应该改变调用堆栈,除非有一些关于远程处理异常很特别.(我知道有一些特殊的方面,但我认为它们不会在这里发挥作用.)这种情况确实会丢失信息:
catch(Exception e)
{
throw e; // Not throw;
}
Run Code Online (Sandbox Code Playgroud)
我的猜测是,一些开发人员已将此包含在内,以便他们可以在线上设置断点throw
.我会摆脱它.
aba*_*hev 14
据我所知,catch (Exception ex) { throw ex }
重置堆栈跟踪.而catch { throw; }
事实并非如此.
因此,如果您没有对错误执行任何其他逻辑,例如日志记录,我不知道有任何理由不删除该捕获.
在与代码访问安全性相关的某些情况下,catch-rethrow子句可以是必要的安全功能.但我怀疑这适用于此.特别是因为没有理智的人会使用这种模式而不添加评论.
其重点是防止异常过滤器在增加权限时运行.
一些相关文章:
http://blogs.msdn.com/b/shawnfa/archive/2005/03/31/404320.aspx
http://msdn.microsoft.com/en-us/library/8cd7yaws(v=VS.100). aspx
http://www.pluralsight-training.net/community/blogs/keith/archive/2005/03/31/7149.aspx
自.net 2:v2.0中的模拟和异常过滤器以来似乎已经过时了