2014-09-12 41 views
2

我有一個類型的集合,我想過濾掉每個不具體的類型。C# - 如何檢查類型是否具體?

我可以看到,我可以檢查isAbstract和isInterface趕上大多數非混凝土,但是這會錯過什麼?

是否有「isConcrete」屬性?

+2

任何不抽象或接口是具體的。這並不是說你可以實例化它, – 2014-09-12 15:59:13

+1

'IsAbstract'也捕獲接口 – 2014-09-12 16:00:23

回答

5

我想,如果你給IsClass && !IsAbstract一個嘗試這可能工作?

if isConcreteType(myType) { DoSomething(); } 

bool isConcreteType(Type type) { 
    return type.IsClass && !type.IsAbstract && !type.IsInterface; 
} 

按照評論由KC-NH

的Structs是值類型等IsClass。你想把結構看成具體的類嗎?如果是這樣,刪除IsClass條件

所以,如果你要考慮struct具體類型,你必須一波帶走了IsClass約束。

bool isConcreteType(Type type) { return !type.IsAbstract && !type.IsInterfaces; } 
+0

結構是值類型,因此IsClass將爲false。你想把結構看成具體的類嗎?如果是這樣,請刪除IsClass條件。 – 2014-09-12 16:15:33

2

IsAbstract相對的是「是具體的」,那麼你是好與那些支票

+0

可能是一個接口。 – Haney 2014-09-12 16:04:12

+2

@Haney:我認爲'IsAbstract'也爲接口返回'true'。 – 2014-09-12 17:04:42

+0

@AndrewWhitaker我認爲你是對的。剛剛在'System.Collections.IEnumerable'上測試過,並且是'true' – Haney 2014-09-12 17:19:23

相關問題