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>()的主要关注是它的速度很快。

最佳答案

您当前的实现(设计使然)不支持值类型。

如果您想要更接近支持所有类型的LINQ的OfType方法,请尝试以下操作:

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

关于c# - OfType <T>()如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2833714/

10-10 09:30