cm0*_*007 6 exception postsharp stack-trace c#-4.0
我希望为函数(或类)编写一个属性,它将捕获抛出的任何异常并将其StackTrace属性设置为string.Empty.我怎样才能做到这一点?
编辑:
如果我无法在普通的C#中实现这一点,我怎样才能在C#中使用PostSharp执行此操作?
[Serializable]
public class MyAspect: OnExceptionAspect
{
public override void OnException(MethodExecutionArgs args)
{
throw new MyCustomException(args.Exception);
}
}
public class MyCustomException : Exception
{
public override string StackTrace
{
get
{
//return new StackTrace(10).ToString(); //Skip frames
return string.Empty; //Return empty string
}
}
}
Run Code Online (Sandbox Code Playgroud)
您实际上必须抛出一个新的异常。@Ani 的示例将简单地重新抛出已使用相同堆栈跟踪抛出的异常(由于您如何到达该方面,它是相同的)。抛出新的异常将“更改”堆栈跟踪,但不会删除它。如果你想删除它,你需要抛出你自己的类来覆盖堆栈跟踪属性。将旧异常传递给新异常将使旧异常成为内部异常(如果你想要的话)
无论有没有 PostSharp,您都可以完成此任务。关键是您的自定义异常类。
给出以下代码
class Program
{
static void Main(string[] args)
{
try
{
Test1();
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace + Environment.NewLine);
}
Console.ReadKey();
}
private static void Test1()
{
try
{
Test2();
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace + Environment.NewLine);
throw e;
}
}
private static void Test2()
{
try
{
Test3();
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace + Environment.NewLine);
throw;
}
}
[MyAspect]
private static void Test3()
{
throw new InvalidOperationException();
}
}
[Serializable]
public class MyAspect : OnExceptionAspect
{
public override void OnException(MethodExecutionArgs args)
{
throw args.Exception;
}
}
Run Code Online (Sandbox Code Playgroud)
输出是
在 C:\Test\Program.cs 中的 ConsoleApplication5.MyAspect.OnException(MethodExecutionArgs args):第 69 行 在 C:\Test\Program.cs 中的 ConsoleApplication5.Program.Test3():在
ConsoleApplication5.Program.Test2( 第 59 行) ) 在 C:\Test\Program.cs:第 47 行在 C:\Test\Program.cs 中的 ConsoleApplication5.MyAspect.OnException(MethodExecutionArgs args):第 69 行 在 C:\Test\Program.cs 中的 ConsoleApplication5.Program.Test3():在
ConsoleApplication5.Program.Test2( 第 59 行) )在 C:\Test\Program.cs:第 52 行,
位于 C:\Test\Program.cs 中的 ConsoleApplication5.Program.Test1():第 34 行在 C:\Test\Program.cs 中的 ConsoleApplication5.Program.Test1():第 39 行 在 C:\Test\Program.cs 中的 ConsoleApplication5.Program.Main(String[] args):第 19 行
| 归档时间: |
|
| 查看次数: |
2299 次 |
| 最近记录: |