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/