Powiel możliwe:
Why does var evaluate to System.Object in “foreach (var row in table.Rows)”?"var" typ wnioskowanie w C#
byłem dość zaskoczony odkrył następujące dzisiaj ....
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"]);
}
Co słychać tutaj?
Czy to jest błąd wnioskowania typu? A jeśli tak, to co go powoduje?
Czy jest to część zdefiniowanego zachowania lub var
? A jeśli tak, dlaczego?
Pomyślałem, że pomysł na var
był taki, że można go używać wszędzie w zmiennej deklaracji/inicjalizacji bez zmiany zachowania.
'DataRowCollection.GetEnumerator()' zwraca 'IEnumerator'. Typ 'IEnumerator.Current' to' object'. –
[dokładne zduplikowane pytanie] (http://stackoverflow.com/questions/2325777/why-cant-i-do-foreach-var-item-in-datatable-rows) Zasadniczo Rows jest 'DataRowCollection', więc kompilator podnosi 'Obiekt', a nie' DataRow' – Axarydax