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 }
当我尝试使用行时,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 }
这不是一个关于VAR的使用问题,对于一个线程在这里.
我正在使用Visual Studio 2008 SP1顺便说一句.
编辑:现在附加了正确的代码.
我想我看到了问题.DataRowCollection是非泛型的,因此编译器唯一知道的是包含Object类型的对象.如果它是一个通用的数据结构,这将是有效的.