.NET:如何检查泛型类型化类中的类型
本文关键字:类型化 泛型类型 泛型类 类型 泛型 何检查 检查 NET | 更新日期: 2023-09-27 17:47:22
如何在类中获取泛型类型化类的类型?
举个例子:
我构建了一个实现 ICollection
public void Add(T item){
...
}
public void Add(IEnumerable<T> enumItems){
...
}
如何在给定类型 T 的方法中询问?
我问题的原因是:如果对象用作T,则集合使用Add(对象项)而不是Add(IEnumerable
所以我需要类似的东西
if (T is object) {
// Check for IEnumerable
}
但这当然不能在 C# 中工作。建议?
谢谢!
迈克尔
您可以使用: 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(); }
}