Comment fonctionne OfType()?Comment fonctionne OfType <T>() Comment ça marche?
J'ai lu this link à propos de ce qui se passe mais comment exactement le fournisseur LINQ sait comment obtenir tous les objets correspondant au type spécifié. Je connais le IQueryable<T>
"enchaîne" les demandes, puis évalue quand GetEnumerator()
est appelée (droite?).
Spécifiquement je veux savoir comment le cadre fait-il rapidement la comparaison de type? J'ai écrit une méthode dans un projet .NET 2.0 qui est allé comme ceci (depuis 2.0 ne supporte pas ce genre de fonctionnalités):
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;
}
}
}
Est-ce la meilleure mise en œuvre?
EDIT: Ma principale préoccupation avec ce OfType<T>()
est que c'est rapide.
Il est donc plus rapide d'utiliser 'is' et de lancer ou est-ce parce que vous avez inclus des types de valeur? Je pensais que l'utilisation de, puis la vérification de null est plus rapide? – TheCloudlessSky
Il est possible que la différence ne soit pas pertinente en raison d'optimisations spécifiques du compilateur. –
@TheCloudlessSky: Si la méthode était limitée à traiter uniquement avec des types ref, j'utiliserais la combinaison 'as'/test-for-null comme vous l'avez déjà fait. La différence de vitesse entre l'utilisation de 'is'/cast et de' as'/test-for-null sera négligeable, mais si ce niveau de micro-optimisation est important pour vous alors je vous suggère de faire un benchmarking. – LukeH