43 .net c# reflection logging exception
当我在该对象的构造函数中时,如何设置对象的InnerException属性Exception?这归结为查找和设置没有setter的属性的支持字段.
顺便说一句:我已经看过这个evain.net - 使用Reflection获取支持属性的字段,但如果可能的话,寻找非基于IL的解决方案.
构造函数是创建类型Exception的地方Exception,所以我不能使用基类构造函数MyException() :base(...)等来调用它.
Mar*_*ell 83
您可以通过调用base ctor来设置内部异常:
public MyException(string message, Exception innerException)
: base(message, innerException) {...}
Run Code Online (Sandbox Code Playgroud)
如果需要运行一些代码来获取异常,请使用静态方法:
public MyException(SomeData data) : base(GetMessage(data), GetInner(data)) {...}
static Exception GetInner(SomeData data) {...} // <===== your type creation here!
static string GetMessage(SomeData data) {...}
Run Code Online (Sandbox Code Playgroud)
Pao*_*sco 41
的Exception类有一个重载的构造接受的内部异常作为参数:
Exception exc = new Exception("message", new Exception("inner message"));
Run Code Online (Sandbox Code Playgroud)
这是你想要的?
Met*_*ght 13
为什么不能只调用构造函数将InnerException作为参数?如果由于某种原因不可能,System.Exception中的支持字段是:
private Exception _innerException;
Run Code Online (Sandbox Code Playgroud)
我发现它使用了Redgate的Reflector.使用反射我想你可以设置内部异常.
编辑:在大多数情况下,通过反射访问私有字段不是一个好主意,但我不太了解NT的情况,以确定它是好主意还是坏主意.
Exception exceptionWithMoreInfo = new Exception("extra info", ex);
Run Code Online (Sandbox Code Playgroud)
这是正常的做法,假设您已经陷入了一个异常,您希望在冒泡之前添加更多信息.
| 归档时间: |
|
| 查看次数: |
25995 次 |
| 最近记录: |