如何在类中获得泛型类的类型?
一个例子:
我构建了一个实现 ICollection<的通用类型集合。 T> 。我有像
这样的方法 public void Add(T item){
...
}
public void Add(IEnumerable<T> enumItems){
...
}
如何在方法中询问给定类型 T ?
我的问题的原因是:如果 object 用作 T ,则集合使用Add(对象项)而不是Add(IEnumerable&lt; object&gt; enumItems),即使参数是IEnumerable。因此,在第一种情况下,它会将整个可枚举集合添加为一个对象,而不是可枚举集合的多个对象。
所以我需要像
这样的东西if (T is object) {
// Check for IEnumerable
}
但当然在C#中无效。建议?
非常感谢!
迈克尔
答案 0 :(得分:29)
您可以使用:typeof(T)
if (typeof(T) == typeof(object) ) {
// Check for IEnumerable
}
答案 1 :(得分:22)
就个人而言,我会通过将IEnumerable<T>
方法重命名为AddRange
来解决问题。这可以避免此类问题,并与现有的API(例如List<T>.AddRange
。
当您要添加的T
实施IEnumerable<T>
时,它还可以保持干净(很少见,我会承认)。
答案 2 :(得分:-1)
如果要在通用类/方法中使用is
运算符,则必须将T
限制为引用类型:
public void MyMethod<T>(T theItem) where T : class
{
if (theItem is IEnumerable) { DoStuff(); }
}