OfType <t>()是如何工作的?</t>

时间:2010-05-14 11:23:21

标签: c# .net linq

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>()的主要担心是

2 个答案:

答案 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中支持,不是吗?),您可以在任何可枚举的集合中使用它,不是吗?