从List中挑选给定类型的对象

时间:2014-07-08 23:33:15

标签: c# .net

我有一个Type个对象。我想在List中找到这种类型的每个对象。有list.OfType<>使用Type对象吗?或者我必须这样使用它:

list.Where(obj => obj.GetType() == type) // corrected thanks to jmcilhinney

这将在我的应用程序中大量使用,因此我需要找到尽可能快的解决方案。

2 个答案:

答案 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);
}

要使用通用版本,最终该函数的某些使用者需要将该类型作为编译时常量提供。