可能重复:
Why does var evaluate to System.Object in “foreach (var row in table.Rows)”?“VAR” 类型推断
我惊讶,而在今天下发现....
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"]);
}
打算请告诉我在这?
这是一种类型推断失败?如果是这样,是什么原因造成的?
或者它是定义的行为的一部分或var
?如果是这样,为什么?
我想到了var
的想法是,你可以在一个变量声明/初始化任何地方使用它,而改变行为。
`DataRowCollection.GetEnumerator()`返回`IEnumerator`。 “IEnumerator.Current”的类型是“object”。 – 2011-02-08 13:47:28
[确切的重复问题](http://stackoverflow.com/questions/2325777/why-cant-i-do-foreach-var-item-in-datatable-rows)基本上行是一个`DataRowCollection`,所以编译器拿起`对象`,而不是`DataRow` – Axarydax 2011-02-08 13:42:14