Existe-t-il un moyen de détecter si une énumération construite à l'aide de LINQ (à des objets dans ce cas) a été matérialisée ou non? Autre que d'essayer d'inspecter le type de la collection sous-jacente? Plus précisément, puisque enumerable.ToArray()
va construire un nouveau tableau même si la collection sous-jacente est déjà un tableau que je cherche un moyen d'éviter ToArray()
étant appelé deux fois sur la même collection.Comment détecter si une énumération LINQ est matérialisée?
Répondre
Le dénombrable ne ont une "collection sous-jacente", il être une collection. Essayez de le convertir en un seul et utilisez la référence résultante:
var coll = enumerable as ICollection<T>;
if (coll != null) {
// We have a collection!
}
Oui, bien sûr, cette solution ne me lie pas à des implémentations spécifiques de IEnumerable. Merci! –
La vérification de "is IEnumerable" peut le faire, il n'y a pas d'autre moyen. Vous ne pouvez cependant pas utiliser la déclaration "var" pour le type de retour - car il "cache" le type. Si vous déclarez un IEnumerable explicite, le compilateur vous indiquera si c'est ce qui est retourné.
Var ne vous cache rien, c'est juste un raccourci pour ne pas avoir à taper le type vous-même. Lorsque le code est compilé, le type sera le type exact qui se serait déclaré. – Femaref
J'ai mis "cacher" entre guillemets pour une raison. Si vous déclarez le type exact que vous souhaitez, le compilateur peut fournir une erreur si vous n'avez pas atteint le type prévu. C'est tout ce que je voulais dire par "se cacher". –
La vérification de 'IEnumerable' n'aide pas puisque c'est ce que j'ai déjà. Peut-être que ma question n'était pas assez claire, mais je veux prendre un 'IEnumerable' et vérifier s'il a été matérialisé (converti en liste ou tableau) ou non. –
- 1. détecter si le type est une fonction
- 2. Détecter si Tooltip est affiché?
- 3. Comment détecter si Vista UAC est activé?
- 4. comment détecter si PHPSESSID est modifié
- 5. Comment détecter si un microphone est présent
- 6. Comment détecter si HPET est disponible
- 7. Détecter si IIS est activé
- 8. Comment détecter si une page Web distante est disponible
- 9. accès: comment détecter avec VBA si une requête est ouverte?
- 10. Comment détecter si une application est exécutée sous KVM?
- 11. Comment détecter dans Safari si une application est installée
- 12. Comment détecter si une application COM est en cours d'exécution?
- 13. WIX: Comment détecter si une application tierce est installée?
- 14. Comment détecter si une boîte de message est visible?
- 15. Énumération de tables LINQ avec énumération de colonnes
- 16. Détecter si Javascript est activé?
- 17. Détecter si ADOBE est installé
- 18. Comment détecter si une table existe? MySql
- 19. Problème avec le résultat de la requête matérialisée - LINQ
- 20. Scala: Comment savoir si une classe est une énumération; isInstanceOf [Enumeration] ne fonctionne pas
- 21. Détecter si une page est dans un iframe - côté serveur
- 22. Détecter si l'URL spécifiée est une image dans Android?
- 23. détecter si une classe OCX est enregistrée dans Windows
- 24. Détecter par programme si une application est installée sur l'iPhone
- 25. Comment configurer une colonne qui est une énumération avec Nhibernate?
- 26. Détecter si une case est cochée, puis obtenir l'ID div
- 27. LINQ, Left Join, exception de lancement ... a échoué car la valeur matérialisée est nulle
- 28. Détecter si Exchange MAPI est installé
- 29. Comment puis-je tester si une énumération est définie ou non tout en ignorant le cas?
- 30. Comment créer une énumération globale
Est-ce que cela fait partie d'un problème plus important que vous essayez de résoudre? – R0MANARMY
@ R0MANARMY - no. –