有没有比我下面写的更好的方法来获得正确设置的异常,就像被抛出一样?
try {
throw new Exception("Blah");
}
catch (Exception exe) {
Assert.NotNull(exe.StackTrace);
DoSomeWork(exe);
// throw;
}
答案 0 :(得分:2)
简短的回答是:NO。
System.Exception属性填入when it is thrown:
默认情况下,在抛出异常对象之前立即捕获堆栈跟踪。当没有抛出异常时,使用Environment.StackTrace获取堆栈跟踪信息。
所以,如果你真的需要一个状态的exception
对象,那么它在被抛出之后就没有别的好办法了,只能投掷并抓住它。
仍然不要放弃主要问题:你真的需要异常对象吗?
如果您的方法有System.Exception
作为输入参数,并且您需要内置StackTrace,请考虑以下可能的解决方案:
作为最后的手段,您可以为System.Exception类创建一个扩展方法,其中包含"填充" System.Exception的一个实例:
private void MyCode()
{
Exception exe = new Exception("Blah");
exe.Populate();
DoSomeWork(exe);
}
public static void Populate(this System.Exception source)
{
try
{
throw source;
}
catch
{
}
}