OfType()如何工作?
我读了this link关于发生了什么,但LINQ提供程序究竟如何知道如何获得与指定类型匹配的所有对象。我知道IQueryable<T>
“链”提出请求,然后在调用GetEnumerator()
时评估(对吗?)。
具体来说我想知道框架如何快速进行类型比较?我在.NET 2.0项目中编写了一个类似的方法(因为2.0不支持这些功能):
public IEnumerable<TResult> OfType<TResult>()
where TResult : class
{
foreach (TItem item in this.InnerList)
{
TResult matchItem = item as TResult;
if (matchItem != null)
{
yield return matchItem;
}
}
}
这是最佳实施吗?
编辑:我对此OfType<T>()
的主要担心是快。
答案 0 :(得分:11)
您当前的实施 - 按设计 - 不支持价值类型。
如果你想要更接近LINQ的OfType
方法,它支持所有类型,那么试试这个:
public IEnumerable<TResult> OfType<TResult>(IEnumerable source)
{
foreach (object item in source)
{
if (item is TResult)
yield return (TResult)item;
}
}
答案 1 :(得分:0)
对我来说它看起来是一个很好的实现,但它看起来有点特定于实现(你指的是this.InnerList)。如果您创建了扩展IEnumerable的扩展方法(在2.0中支持,不是吗?),您可以在任何可枚举的集合中使用它,不是吗?