How does OfType() Work?
I read this link about what’s going on but how exactly does the LINQ provider know how to get all objects matching the specified type. I know the IQueryable<T> “chains” up requests and then evaluates when GetEnumerator() is called (right?).
Specifically I want to know how does the framework quickly do type comparison? I wrote a method in a .NET 2.0 project that went like this (since 2.0 doesn’t support these kind of features):
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;
}
}
}
Is this the best implementation?
EDIT: My main concern with this OfType<T>() is that it is fast.
Your current implementation — by design — doesn’t support value-types.
If you wanted something closer to LINQ’s
OfTypemethod, that supports all types, then try this: