2008-10-21 116 views
8

這是我在這裏的第一個問題,所以我希望我可以很好地表達它,並希望它不會太容易麻煩。基本類型的基本類型

我有下面的類SUBSIM延伸,其延伸MainSim。在一個完全獨立的類(以及庫)中,我需要檢查傳遞的對象是否爲MainSim。所以以下是檢查;

 
Type t = GetType(sim); 
//in this case, sim = SubSim 
if (t != null) 
{ 
    return t.BaseType == typeof(MainSim); 
} 

顯然t.BaseType是否會返回因爲Type.BaseType會從相應當前Type直接繼承的類型。

短期不必做t.BaseType.BaseType得到MainSub的,有沒有其他的方式來獲得使用.NET庫的正確類型?還是有重寫可以重新定義返回主類?

預先感謝您

回答

17

有4種相關的標準方法:

sim is MainSim; 
(sim as MainSim) != null; 
sim.GetType().IsSubclassOf(typeof(MainSim)); 
typeof(MainSim).IsAssignableFrom(sim.GetType()); 

您還可以創建一個遞歸方法:

bool IsMainSimType(Type t) 
{ if (t == typeof(MainSim)) return true; 
    if (t == typeof(object)) return false; 
    return IsMainSimType(t.BaseType); 
} 
+0

我喜歡這種遞歸方法,我想我會嘗試而不是我的解決方案。謝謝! – 2008-10-21 17:11:30

10
if (sim is MainSim) 

是你所需要的。 「是」查找繼承樹。

1

的 '是' 選項並沒有爲我工作。它給了我警告; 「給定的表達方式絕對不是所提供的('MainSim')類型」,但我確實相信,這個警告更多地與我們已有的框架有關。我的解決方案最終成爲:

return t.BaseType == typeof(MainSim) || t.BaseType.IsSubclassof(typeof(MainSim));

並不像我希望的那樣乾淨,也不像您的答案那樣直截了當。無論如何,謝謝大家的回答。他們的簡單性讓我意識到我有很多東西需要學習。

+0

你可能做過「return t is MainSim」,而不是「return sim is MainSim」。 – Hallgrim 2008-10-21 16:03:19