是否可以从堆栈跟踪中获取实际类型?
问题描述:
我在写一个ExceptionFactory类,使用System.Diagnostics.StackTrace
。是否可以从堆栈跟踪中获取实际类型?
var trace = new StackTrace(1, true);
var frames = trace.GetFrames();
var method = frames[0].GetMethod();
现在,班
class Base
{
public void Foo()
{
//Call ExceptionFactory from here
}
}
class A : Base {}
//...
var x = new A();
x.Foo();
method.DeclaringType
将返回typeof(Base)
。但是,我需要typeof(A)
。有可能得到某种方式吗?
3210也不起作用。
答
不,因为该方法实际上是在Base
上声明的。只要该方法未被覆盖,您始终会获得与该方法相同的实例,而不管您是在基类还是在派生类上查询该实例。
但是为什么你需要其他类型呢?你的问题可能有另一种解决方案,这就是为什么我问这个问题。
答
是的,只是使用this.GetType()
。这将返回子类。所以下面的代码片段应该打印“A”。
public void Foo()
{
System.Diagnostics.Debug.Print(this.GetType().ToString());
}
究竟是一个ExceptionFactory? – 2011-01-31 12:20:03
它基于调用的地方(例如:模块,调用类型的自定义属性等)来参数化自定义异常 - 这就是为什么我需要实际类型,所以我可以查询类A的属性而不是类Base – TDaver 2011-01-31 12:24:30
为什么ReflectedType不起作用?它返回什么? – Vlad 2011-01-31 12:25:57