2011-01-31 92 views
4

我在写一个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也不起作用。

+3

究竟是一个ExceptionFactory? – 2011-01-31 12:20:03

+0

它基于调用的地方(例如:模块,调用类型的自定义属性等)来参数化自定义异常 - 这就是为什么我需要实际类型,所以我可以查询类A的属性而不是类Base – TDaver 2011-01-31 12:24:30

+0

为什么ReflectedType不起作用?它返回什么? – Vlad 2011-01-31 12:25:57

回答

4

不,因为该方法实际上是在Base上声明的。只要该方法未被覆盖,您始终会获得与该方法相同的实例,而不管您是在基类还是在派生类上查询该实例。

但是为什么你需要其他类型呢?你的问题可能有另一种解决方案,这就是为什么我问这个问题。

0

是的,只是使用this.GetType()。这将返回子类。所以下面的代码片段应该打印“A”。

public void Foo() 
{ 
    System.Diagnostics.Debug.Print(this.GetType().ToString()); 
}