2010-03-22 71 views
7

假设我创建收集像如何检测集合是否包含特定类型的实例?

Collection<IMyType> coll; 

然后我有IMyTypem像,T1,T2,T3许多im​​plelentations ...

然后我想知道如果集合科尔包含T1类型的实例。所以我想写一个方法,如

public bool ContainType(<T>){...} 

这里param应该是类类型,而不是类实例。 如何为这类问题编写代码?

+0

你可以使用LINQ到对象吗? 您使用的是哪个版本的C#? – wtaniguchi 2010-03-22 19:52:10

回答

9

你可以这样做:

public bool ContainsType(this IEnumerable collection, Type type) 
{ 
     return collection.Any(i => i.GetType() == type); 
} 

然后调用它像:

bool hasType = coll.ContainsType(typeof(T1)); 

如果你想看看一个集合包含一个类型,可转换为指定的类型,你可以做:

bool hasType = coll.OfType<T1>().Any(); 

但是,这是不同的,因为如果coll包含T1的任何子类,它也会返回true。

+0

+1用于避免循环和使用lambda。 – 2010-03-22 19:53:35

+0

非常感谢。 – KentZhou 2010-03-22 19:53:57

+0

那么,如何调用这个方法? Coll.COntainsType(T1)?它在VS中不被接受。我得到的错误说:'T1'是'类型',但用于'变量' – KentZhou 2010-03-22 19:58:49

相关问题