我有一个Type
个对象。我想在List中找到这种类型的每个对象。有list.OfType<>
使用Type
对象吗?或者我必须这样使用它:
list.Where(obj => obj.GetType() == type) // corrected thanks to jmcilhinney
这将在我的应用程序中大量使用,因此我需要找到尽可能快的解决方案。
答案 0 :(得分:3)
您需要致电Where
:
var items = myList.Where(item => item.GetType() == myType);
答案 1 :(得分:2)
如果您将类型存储在变量中,则无法使用OfType<T>
。请记住,对于泛型,type参数是编译时常量。因此,您不能通过在变量中指定T
来使用泛型函数,这在运行时才会知道。
换一种方式来看,你的函数有两种可能的变体:
public IEnumerable<T> GetOfType<T>(IEnumerable<object> list)
{
return list.OfType<T>();
}
public IEnumerable<object> GetOfType(IEnumerable<object> list, Type type)
{
return list.All(obj => obj != null && obj.GetType() == type);
}
要使用通用版本,最终该函数的某些使用者需要将该类型作为编译时常量提供。