在C#中,var关键字与输入关键字不同吗?

And*_*sen 2 c# var

C#3.0引入了var关键字.编译时,编译器会为您插入正确的类型.这意味着它甚至可以在2.0运行时运行.到现在为止还挺好.但是前几天我发现了一个案例,var关键字将被替换为对象,因此不够具体.说你有类似的东西:

var data = AdoMD.GetData(...); // GetData returns a DataTable

foreach (var row in data.Rows)
{
     string blah = (string)row[0]; // it fails since it's of type object
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用行时,IntelliSense和编译器都告诉我它是对象类型.data.Rows是类型的System.Data.DataRowCollection.以下作品:

var data = AdoMD.GetData(...); // GetData returns a DataTable

foreach (DataRow row in data.Rows)
{
     string blah = (string)row[0]; // works since it now has the right type
}
Run Code Online (Sandbox Code Playgroud)

这不是一个关于VAR的使用问题,对于一个线程在这里.

我正在使用Visual Studio 2008 SP1顺便说一句.

编辑:现在附加了正确的代码.

And*_*sen 10

我想我看到了问题.DataRowCollection是非泛型的,因此编译器唯一知道的是包含Object类型的对象.如果它是一个通用的数据结构,这将是有效的.