.NET:如何检查泛型类型化类中的类型

本文关键字:类型化 泛型类型 泛型类 类型 泛型 何检查 检查 NET | 更新日期: 2023-09-27 17:47:22

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

举个例子:

我构建了一个实现 ICollection 的泛型类型集合。在我有这样的方法

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

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

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

所以我需要类似的东西

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

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

谢谢!

迈克尔

.NET:如何检查泛型类型化类中的类型

您可以使用: typeof(T)

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

就个人而言,我会通过将IEnumerable<T>方法重命名为 AddRange 来回避这个问题。这样可以避免此类问题,并且与现有 API (如 List<T>.AddRange )一致。

当您要添加的T实现IEnumerable<T>时,它还可以保持清洁(我承认很少见)。

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

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