2009-11-24 91 views
1

在文檔中很難找到比我想象的更多的東西。無論如何,我有一些Type的實例。我如何知道它們是否代表類,方法,接口等?獲取C#反射中「類型」的類型

 
class Bla { ... } 
typeof(Bla).GetKindOrWhatever() // need to get something like "Class" 

(我使用的是單聲道Linux上但不應該影響這個問題,我在做移植的代碼)

回答

9

Type.IsClass可能有助於在這裏。還有Type.IsInterface

退房...... http://msdn.microsoft.com/en-us/library/system.type_members.aspx

上有種類不少 「IsXxxx」 屬性。希望這些會做你想做的。

順便說一句,你應該檢查出其他問題上SO這個問題上,包括這一個...

typeof(System.Enum).IsClass == false

...如果你要來檢查類型枚舉類型,因爲有一些奇怪的(但可預測的)結果。

+0

。我找不到的是與type.IsStruct對應的s: – 2009-11-25 00:56:52

+0

IsValueType是最接近你的。 struct是C#語言的東西,而不是.NET CLR的東西。所有結構都是值類型。請記住關於枚舉的事情,雖然我上面提到 – 2009-11-25 08:49:20

+0

是否有任何其他值類型可能出現在Assembly.getExportedMembers()中?我懷疑原始人會出現在那裏,而這兩者是我現在能想到的唯一的價值類型。 – 2009-11-25 22:31:05

1

Type類具有一些名爲IsXXX的屬性。
例如它有一個IsEnum,IsClass,IsInterface。
如果我理解正確你的問題,這是你所需要的

1

正如其他人所說,Type類有,如果你只需要知道你的類型是一個類,接口,委託等,您可以使用各種屬性。

如果你有一個類型的對象,你想知道,如果它是一個特定的類型,那麼我建議使用的類型類中找到的IsAssignableFrom法:用現在

 Type objectType = obj.GetType(); 
     Type interfaceType = typeof(IExample); 

     if (interfaceType.IsAssignableFrom(objectType)) 
     { 
      //... 
     }