¿Cómo funciona OfType()?¿Cómo funciona OfType <T>() ¿Funciona?
He leído this link sobre lo que está sucediendo, pero cómo sabe exactamente el proveedor de LINQ cómo obtener todos los objetos que coinciden con el tipo especificado. Sé que el IQueryable<T>
"encadena" solicitudes y luego evalúa cuando se llama GetEnumerator()
(¿verdad?).
Específicamente, quiero saber cómo funciona el marco de comparación de tipo rápidamente? Escribí un método en un proyecto .NET 2.0 que fue como esto (desde 2.0 no soporta este tipo de características):
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;
}
}
}
¿Es esta la mejor aplicación?
EDIT: Mi principal preocupación con este OfType<T>()
es que es rápido .
Entonces, ¿es más rápido usar 'is' y luego lanzarlo o es debido a su inclusión de tipos de valores? Pensé que usar as y luego buscar null es más rápido. – TheCloudlessSky
Es posible que la diferencia sea irrelevante debido a optimizaciones de compilador específicas. –
@TheCloudlessSky: si el método se limitara a tratar con tipos de ref, entonces usaría la combinación 'as'/test-for-null como ya lo hizo. La diferencia de velocidad entre usar 'is'/cast y' as'/test-for-null será insignificante, pero si ese nivel de micro-optimización es importante para usted, entonces le sugiero que haga algún benchmarking. – LukeH