15

如何在类中获取泛型类型类的类型?

一个例子:

我构建了一个实现ICollection< T>的通用类型化集合。在我里面我有这样的方法

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

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

我如何在给定类型T的方法中询问?

我的问题的原因是:如果object用作​​ T集合使用 Add(object item) 而不是 Add(IEnumerable<object> enumItems) 即使参数是 IEnumerable。因此,在第一种情况下,它将整个可枚举集合添加为一个对象,而不是可枚举集合的多个对象。

所以我需要类似的东西

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

但这当然不能在 C# 中工作。建议?

非常感谢你!

迈克尔

4

3 回答 3

32

您可以使用:typeof(T)

if (typeof(T) == typeof(object) ) {
    // Check for IEnumerable
}
于 2008-10-24T11:15:09.033 回答
22

IEnumerable<T>就个人而言,我会通过将方法重命名为AddRange. 这避免了此类问题,并且与现有的 API 一致,例如List<T>.AddRange.

T当您想添加工具时,它还可以保持清洁IEnumerable<T>(我承认很少见)。

于 2008-10-24T11:24:58.203 回答
-1

如果要is在泛型类/方法中使用运算符,则必须限制T为引用类型:

public void MyMethod<T>(T theItem) where T : class
{
    if (theItem is IEnumerable) { DoStuff(); }
}
于 2008-10-24T11:27:28.603 回答