2011-01-31 89 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()); 
}