创建c#异常,而不是抛出它
本文关键字:异常 创建 | 更新日期: 2023-09-27 18:05:58
是否有一种比我在下面写的更好的方法来正确设置异常,就像抛出时一样?
try {
throw new Exception("Blah");
}
catch (Exception exe) {
Assert.NotNull(exe.StackTrace);
DoSomeWork(exe);
// throw;
}
简短的回答是:不。
系统。在抛出异常时填充异常属性:
默认情况下,在抛出异常对象之前立即捕获堆栈跟踪。使用环境。当没有抛出异常时,获取堆栈跟踪信息。
所以如果你真的需要一个exception
对象在它被抛出后的状态,你没有其他好的方法,只能抛出并捕获它。
仍然没有放弃主要的问题:你真的需要异常对象吗?
如果你有一个以System.Exception
作为输入参数的方法,并且你需要在其中使用StackTrace,考虑以下可能的解决方案:
- 使用可选的StackTrace输入参数重载方法。
- System的继承者。隐藏StackTrace属性的异常,该属性在对象创建时记住StackTrace,而不是抛出。
-
作为最后的手段,您可以为系统创建一个扩展方法。"填充"系统实例的异常类。例外:
private void MyCode() { Exception exe = new Exception("Blah"); exe.Populate(); DoSomeWork(exe); } public static void Populate(this System.Exception source) { try { throw source; } catch { } }