枚举假错误。 "cannot be referred to before it is declared"

Enum False Error. "cannot be referred to before it is declared"

我在 VS2019 中使用 VB.NET,我遇到了一个“枚举”错误,这让我绕了好一阵子。我已经包含了最小可重现代码的屏幕截图,因为我认为它更清楚地显示了问题。在代码中,您可以看到我有两个错误,所以我转到列表中最上面的错误(无法引用局部变量)并检查代码行。该行看起来是正确的,我的 Enum 声明没有显示错误,但是将鼠标悬停在错误行上给了我错误消息,当我右键单击该行中的 Enum 并选择“转到目的地”时,它让我无处可去。就好像没有声明 Enum 一样。经过一段时间的摸索,我最终放弃了这行代码,认为我一定遗漏了一些东西,然后我去了第二个错误。第二个错误中缺少的数组变量名很明显并且很容易修复,但我还注意到修复这个完全不连接的行也修复了第一个错误。就好像第二个错误导致 Enum 声明变得无效一样。所以我的问题是:如果 Enum 在同一子例程中稍后被错误使用,那么 Enum 变得不存在会影响所有以前的使用,这是否正常?我敢肯定这不是我第一次犯这样的打字错误,但我不记得曾经以这种方式被误导过。谢谢

下面的代码显示了有错误和没有错误的代码。

Public Enum MyEnum
    FirstValue = 0
    SecondValue
End Enum
Public Sub TestSub() 'Shows Enum error
    Dim arr(1, 1) As Integer
    'The next line shows an Enum cannot be referenced error.
    Dim x As Double = CDbl(arr(1, MyEnum.FirstValue))
    'Just some abitrary code
    Dim doSomething As Double = 0
    Dim doSomethingElse As Double = 0
    Dim doACalculation As Double = doSomething * doSomethingElse
    'The next line was inadvertently edited wrong.
    Dim y As Double = CDbl(1, MyEnum.SecondValue)
End Sub

Public Sub TestSub2() 'No errors
    Dim arr(1, 1) As Integer
    'The next line was not altered in any way but now shows no error.
    Dim x As Double = CDbl(arr(1, MyEnum.FirstValue))
    'Just some abitrary code
    Dim doSomething As Double = 0
    Dim doSomethingElse As Double = 0
    Dim doACalculation As Double = doSomething * doSomethingElse
    'When this line was corrected the previous error also went away.
    Dim y As Double = CDbl(arr(1, MyEnum.SecondValue))
End Sub

为了形式化 Jimi 在他的评论中提出的内容,编译器正在猜测您在这一行中试图实现的目标:

Dim y As Double = CDbl(1, MyEnum.SecondValue)

结果是这样的:

Dim y As Double = CDbl(1), MyEnum

它认为您错过了逗号前的右括号,这是第二条错误消息告诉您的,然后您破坏了 MyEnum 变量的声明。正如建议的那样,该变量优先于具有相同名称的类型,因此,在该方法中,编译器认为错误的第一行是在声明变量之前尝试使用该变量,而不是尝试使用 Enum.