代码之家  ›  专栏  ›  技术社区  ›  DilbertDave

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

  •  3
  • DilbertDave  · 技术社区  · 14 年前

    我正在将一个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的一维数组”类型的值无法转换为“SecurityLayer.Model.Service”

    Dim serviceArray = New SecurityLayer.Model.Service(){}
    serviceArray = new SecurityLayer.SecurityBusinessController.GetServices(userId)
    

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

    Option Explicit和Option Strict在这两个ide中是相同的,所以不可能是那样的(或者至少我是这么认为的)。

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

    1 回复  |  直到 14 年前
        1
  •  6
  •   Hans Passant    14 年前

    type inference. 以前,Dim声明是非类型化的,serviceArray是Object类型。现在,编译器根据您以前的用法推断serviceArray是Service类型。使用同一个变量存储不同的对象是可疑的。