Si on boucle à travers un xmlnodeliste comme celui-ci tout fonctionne comme prévu - FOO est clairement de type xmlnode em> et le vs.net IDE affiche des méthodes et des champs . p> d'autre part p> n'est pas compilé car ici foo est de type objet em>. TYPE INFERENCE Sorte de travaux mais infère objet em>. P> Apparemment, les éléments de xmnodeliste ne sont pas un type défini em>, mais l'attribuant à xmlnode au lieu de var fait quelque chose implicitement (casting ou nonbal). P> Première question: quel est le mécanisme derrière cela? p> Deuxième question (liée): Comment trouver les types que l'on peut utiliser dans ce type de boucle? Est-ce que l'IDE vs.net aide? P> P>
3 Réponses :
Si vous insistez sur l'utilisation du Mais c'est moche et nécessite plus de frappes de frappes. Vous pouvez également simplement déclarer explicitement xmlnodeliste code>
Implémente uniquement l'interface code> iEnumerable code> non générique, et non quelque chose comme iEnumerable
objet code> dans votre foreach.
var code> mot-clé, vous pouvez lancer les éléments de
xmlnodelist code> comme: p>
xmlnode foo code> et laisser le pourchaire le jeter pour vous à la volée. P> p>
Merci beaucoup, compris! Je ne veux pas laid, mais comme je l'ai écrit dans mon commentaire à Jon, la question avait une partie pratique: si Resharper me donne «Var», quel est le moyen le plus rapide de trouver le type réel?
Comme Daniel Hilgarth souligne, le moyen le plus simple de le faire est de regarder la documentation.
comme bolllock notes, La boucle est entièrement légal et effectue une distribution (qui peut lancer une exception, bien sûr) sur chaque valeur. P> Ce n'est pas vraiment clair pour Moi ce que vous entendez par votre deuxième question - mais je vous recommanderais simplement que vous utilisez explicitement mais cela ressemble à la surkill .. . p> p> xmlnodeliste code> uniquement implémente
ienumerable code>.
foreach code> moulage automatiquement pour vous dans les coulisses, donc ceci : p>
xmlnode code> dans votre boucle. Si vous vraiment em> veux utiliser
var code>, vous pouvez écrire: p>
Merci, iEnumerable vs. iEnumerable
@Oolaf: Non, il ne peut y avoir d'intellensense, car les informations ne sont tout simplement pas là. Vous devez savoir ce que vous faites - ce que vous devriez quand même, bien sûr :)
C'est ce que je voulais savoir (les informations ne sont tout simplement pas là). Merci de m'aider à savoir ce que je fais!
XMLnodelist a été dans le document .NET avant de soutenir les génériques. À cause de cela, il implémente uniquement l'interface non générique BTW: L'IDE n'a pas été appelé vs.net car Visual Studio 2005 a été publié :-) Elle s'appelle VS seulement depuis. P> ienumerable code> et non le générique
ienumerable
Pour savoir quels types peuvent figurer dans cette liste, vous devez lire la documentation. Le meilleur moyen est le indexer . p>
Merci également à l'indice vs.net (nous l'utilisons toujours en interne)!
Vous voudrez peut-être utiliser les classes de l'espace de noms System.xml.Linq, car ils mettent en œuvre les versions génériques iEnumérables entre autres. Le var doit être déduit correctement lorsque vous utilisez ces classes. Ymmv
@Chris: Merci pour le conseil - je vais vérifier.
+1, j'allais juste poser la même question :-)