OfType ()如何工作?

OfType()如何工作?

我读了这个链接,了解发生了什么,但LINQ提供程序究竟如何知道如何获得与指定类型匹配的所有对象。 我知道IQueryable “链接”请求,然后在调用GetEnumerator()时评估(对吗?)。

具体来说,我想知道框架如何快速进行类型比较? 我在.NET 2.0项目中编写了一个类似的方法(因为2.0不支持这些function):

  public IEnumerable OfType() where TResult : class { foreach (TItem item in this.InnerList) { TResult matchItem = item as TResult; if (matchItem != null) { yield return matchItem; } } } 

这是最好的实施吗?

编辑:我对这个OfType()主要关注是它很快

您当前的实现 – 按设计 – 不支持值类型。

如果你想要更接近LINQ的OfType方法,它支持所有类型,那么试试这个:

 public IEnumerable OfType(IEnumerable source) { foreach (object item in source) { if (item is TResult) yield return (TResult)item; } } 

它看起来对我来说是一个很好的实现,但它看起来有点特定于实现(你指的是this.InnerList)。 如果您创建了扩展IEnumerable的扩展方法(在2.0中支持,不是吗?),您可以在任何可枚举的集合中使用它,不是吗?