为什么这段代码在VS2005中编译而不是VS2008(VB.NET)

Dil*_*ave 3 vb.net syntax visual-studio-2005 visual-studio-2008

我正在将VB.NET Web应用程序从Visual Studio 2005(.NET 2.0)迁移到Visual Studio 2008(.NET 3.5),虽然它很简单但我遇到了一个需要一些时间来解决的问题.

有问题的代码如下:

Dim serviceArray = New SecurityLayer.Model.Service()
serviceArray = new SecurityLayer.SecurityBusinessController.GetServices(userId)
Run Code Online (Sandbox Code Playgroud)

哪个在VS2005/.NET2.0中编译但在VS2008/.NET3.5中失败,并出现以下错误:

"SecurityLayer.Model.Service的1维数组"类型的值无法转换为"SecurityLayer.Model.Service"

这表明serviceArray未声明为数组,并且在阅读MSDN文档时,它看起来不像版本之间的语法有所改变,但它声明无论是否传入任何值,都需要花括号.果然,在它的声明中添加花括号可以解决问题(编译器移动到下一个实例!).

Dim serviceArray = New SecurityLayer.Model.Service(){}
serviceArray = new SecurityLayer.SecurityBusinessController.GetServices(userId)
Run Code Online (Sandbox Code Playgroud)

更新此声明的所有实例后,代码现在构建并按预期运行.

Option Explicit和Option Strict在两个IDE中是相同的,所以它不能是那个(或者至少是我假设的).

所以我的问题是,为什么这个构建在VS2005/.NET2.0而不是VS2008/.NET3.5中?

提前致谢

Han*_*ant 6

VB.NET版本9获得了类型推断. 以前你的Dim声明是无类型​​的,serviceArray是Object类型.现在,编译器根据您之前的用法推断出serviceArray属于Service类型.使用相同的变量存储不同的对象是可疑的.