我正在将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中?
提前致谢
答案 0 :(得分:6)
VB.NET版本9获得type inference.以前您的Dim声明是无类型的,serviceArray是Object类型。现在,编译器根据您之前的用法推断出serviceArray属于Service类型。使用相同的变量来存储不同的对象是可疑的。