2011-02-26 52 views
2

例如,有一個類型A,我怎麼能知道它的一個是Windows.Forms.Form?如何知道一個類的最低基地是某種類型

+1

取決於「最低祖先」的含義。所有類型層次結構的基礎都是Object,因此沒有任何東西可以有Form。如果你的意思是具體類型,形式是非常罕見的,我看不到用法... – 2011-02-26 01:06:05

+0

修改問題 – user496949 2011-02-26 01:07:08

+0

A.BaseType == typeof(System.Windows.Forms.Form) – 2011-02-26 01:09:28

回答

0

像這樣(未經):

var x = yourValue; 
var t = x.GetType(); 
var p = t; 
while (p.BaseType != null) 
{ 
    p = t.BaseType; 
} 

如果你正在尋找一個特定的類型,而不是隻知道基本是什麼,你測試它。

var myX = x as WhateverType; 
if (myX != null) 
{ 
    // Use myX 
} 
+0

只是hardcode typeof(object)... – 2011-02-26 01:07:34

0

在.NET中,它的「最低祖先」將始終是通用基類Object。你能改說你的問題嗎?

+0

重新查詢問題 – user496949 2011-02-26 01:19:32

2

您可以鍵入使用IsSubclassOf方法:

var myType = typeof(Form1); 
var formType = typeof(Form); 

Console.WriteLine(myType.IsSubclassOf(formType)); //outputs 'true' 
0

下面是檢查類型之間的祖先關係的一個快捷方式。也就是說,如果Form類型的變量可以引用A,那麼A就是從Form派生的:A:

Type aType=typeof(A); 

... 
bool isFormAnAncestorOfA = typeof(Form).IsAssignableFrom(aType); 
相關問題