2008-10-24 84 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