【发布时间】:2010-09-28 08:01:04
【问题描述】:
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使用的问题,here有一个线程。
我正在使用 Visual Studio 2008 SP1 顺便说一句。
编辑:现在附上了正确的代码。
【问题讨论】:
-
你能把你的代码贴在这里吗?
-
之所以如此,是因为这段代码是在 2.0 之前的早期编写的,那时还没有泛型。那时我们都使用 ArrayList 而不是强类型 List
-
var 如果在当前作用域的某个地方定义了一个 'var' 类,也会有所不同(因为它会覆盖关键字的使用),尽管这是相当病态的,并且通常会导致各种编译错误.