Duplicar posibles:
Why does var evaluate to System.Object in “foreach (var row in table.Rows)”?"var" inferencia de tipos en C#
estaba bien sorprendido al descubierto lo siguiente hoy ....
SqlDataReader reader = cmd.ExecuteReader();
DataTable schemaTable = reader.GetSchemaTable();
// the following compiles correctly
foreach (DataRow field in schemaTable.Rows)
{
Console.WriteLine(field["ColumnName"]);
}
// the following does not compile as 'var' is of type 'object'
foreach (var field in schemaTable.Rows)
{
// Error: Cannot apply indexing with [] to an expression of type 'object'
Console.WriteLine(field["ColumnName"]);
}
¿Qué está pasando ¿aqui?
¿Esto es un error de inferencia de tipo? Y si es así, ¿qué lo causa?
¿O es parte del comportamiento definido o var
? Y si es así, ¿por qué?
Pensé que la idea de var
era que se podía usar en cualquier lugar en una declaración de variable/inicialización sin cambiar el comportamiento.
'DataRowCollection.GetEnumerator()' devuelve 'IEnumerator'. El tipo de 'IEnumerator.Current' es' object'. –
[pregunta duplicada exacta] (http://stackoverflow.com/questions/2325777/why-cant-i-do-foreach-var-item-in-datatable-rows) Basically Rows es un 'DataRowCollection', por lo que el compilador toma 'Object', no' DataRow' – Axarydax