2008-10-24 96 views
13

我如何獲得一個通用的類型化類的類中的類型?.NET:如何檢查通用類型類中的類型?

一個例子:

我建立一個通用的類型集合實施ICollection的< T>。在我有這樣

public void Add(T item){ 
     ... 
    } 

    public void Add(IEnumerable<T> enumItems){ 
     ... 
    } 

我怎樣才能在方法中要求給定類型牛逼的方法呢?

的原因我的問題是:作爲牛逼收集使用添加(物項),而不是添加(IEnumerable的<對象> enumItems),即使參數的IEnumerable如果對象使用。因此,在第一種情況下它會增加整個枚舉集合作爲一個對象,而不是枚舉集合的多個對象。

所以,我需要這樣的東西

if (T is object) { 
    // Check for IEnumerable 
} 

當然不能在C#中的工作,但。建議?

非常感謝!

邁克爾

回答

21

就個人而言,我會一邊通過重命名IEnumerable<T>方法AddRange步驟的問題。這避免了這樣的問題,並與現有的API,如List<T>.AddRange一致。

當你想添加的T實現IEnumerable<T>(罕見,我承認)它也保持乾淨。

29

您可以使用:typeof(T)

if (typeof(T) == typeof(object)) { 
    // Check for IEnumerable 
} 
+2

這回答了標題提出的問題。 – reads0520 2014-10-06 04:02:21

-1

如果你想使用is運營商在一個通用類/方法,你必須限制T爲引用類型:

public void MyMethod<T>(T theItem) where T : class 
{ 
    if (theItem is IEnumerable) { DoStuff(); } 
} 
+0

我認爲當一個非一般的IEnumerable作爲一個System.Object傳遞他只是擔心當T System.Object的 – 2008-10-24 11:30:21