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

时间:2010-02-19 11:20:08

标签: vb.net visual-studio-2008 visual-studio-2005 syntax

我正在将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)

在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)

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

选项显式和选项严格在两个IDE中是相同的,所以它不能是那个(或者至少是我所假设的)。

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

提前致谢

1 个答案:

答案 0 :(得分:6)

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