我正在将VB.NET Web应用程序从Visual Studio 2005(.NET 2.0)迁移到Visual Studio 2008(.NET 3.5)虽然它大多是直截了当的,但我遇到了需要一些时间来解决的问题。为什么此代码在VS2005中编译但不是VS2008(VB.NET)
有问题的代码读取:
Dim serviceArray = New SecurityLayer.Model.Service()
serviceArray = new SecurityLayer.SecurityBusinessController.GetServices(userId)
在VS2005/.NET2.0哪个编译,但在VS2008/.NET3.5,出现以下错误失败:
Value of type '1-dimensional array of SecurityLayer.Model.Service' cannot be converted to 'SecurityLayer.Model.Service'
这表明serviceArray没有声明为一个数组,并且读取MSDN文档时,它看起来不像语法在版本之间发生了变化,但它指出,无论是否传入任何值,都需要大括号。果不其然,在它的声明中添加大括号可以解决问题(并且编译器会移到下一个实例!)。
Dim serviceArray = New SecurityLayer.Model.Service(){}
serviceArray = new SecurityLayer.SecurityBusinessController.GetServices(userId)
在更新了此声明的所有实例之后,代码现在按照预期构建并运行。
Option Explicit和Option Strict在两个IDE中都是相同的,所以它不能是(或者至少这是我所假设的)。
所以我的问题是,为什么这个内置VS2005/.NET2.0而不是VS2008/.NET3.5?
在此先感谢
啊 - 现货!我通常和C#一起工作,所以不能真正加快VB.NET的速度。作为一项测试,我已经在VS2008中删除了大括号(为了生成错误),然后在课程的顶部添加了“Option Infer Off”。错误正式消失! 不用说,我没有像这样离开它,而是恢复到正确的语法。很高兴知道原因 - 谢谢。 – DilbertDave
只要你在修改Option,一定要添加Option Explicit On。它捕获了许多像这样的错误。 –
显式选项显式似乎在IDE中默认打开(总是值得检查) – DilbertDave