Si uno recorre un XmlNodeList como esto¿Por qué var infer type object y no XmlNode en XmlNodeList loop?
foreach (XmlNode foo in xmlNodeList) {string baa = foo.Attributes["baa"].Value;}
todo funciona como se esperaba - foo es claramente de tipo XmlNode y el IDE de VS.NET muestra los métodos y campos.
Por otro lado
foreach (var foo in xmlNodeList) { string baa = foo.Attributes["baa"].Value; }
no está compilando porque aquí foo es de tipo objeto. Tipo tipo de inferencia funciona pero infiere objeto.
Al parecer, los elementos de XmlNodeList no son de un solo tipo definido, pero asignándolos a XmlNode en lugar de var hace algo de manera implícita (colada o unboxing).
Primera pregunta: ¿cuál es el mecanismo detrás de eso?
Segunda pregunta (relacionada): ¿cómo encontrar los tipos que se pueden usar en este tipo de bucle? ¿El VS.NET IDE ayuda?
Puede usar las clases en el espacio de nombres system.xml.linq ya que implementan las versiones genéricas IEnumerable entre otras. La var debe inferirse correctamente cuando se usan estas clases. YMMV –
@Chris: Gracias por la pista, lo comprobaré. – Olaf
+1, solo iba a hacer la misma pregunta :-) –