变量“<variablename>”隐藏了一个封闭块</variablename>中的变量

时间:2010-08-02 15:49:53

标签: .net vb.net syntax-error

从MSDN复制并粘贴一些示例代码时,我想出了标题中的错误 - Variable '' hides a variable in an enclosing block

我复制的所有内容都是try循环的一个非常基本的例子。

正如它在建议中所说的那样“此错误的常见原因是在事件处理程序中使用Catch e As Exception。如果是这种情况,请将Catch块变量命名为ex而不是e。”

所以,我这样做了,将e更改为ex并且它有效,但是,我不明白为什么这不会导致同样的错误。

有人可以更好地解释错误是什么以及为什么导致错误,而前者不是?

编辑 -

代码示例......

    Try
    Catch e As Exception
        msgbox(e.Message)
    End Try

    Try
    Catch ex As Exception
        msgbox(ex.Message)
    End Try

我不明白为什么第一个导致问题,第二个不导致问题,对我而言,就像......使用上面的苹果,下面的苹果 - 说你不能使用同样的东西在这两个地方,然后将两者都改为橙子并突然让它发挥作用。当然第二个与第一个相同。

3 个答案:

答案 0 :(得分:13)

您可能希望粘贴错误的完整代码以进行确认,但我会假设事件处理程序定义了一个名为“e”的参数。然后,当您放入catch块时,它也会尝试定义“e”,从而导致错误。当然,当catch定义“ex”而不是“e”时,就没有名称冲突发生,所以它有效。

修改:编辑以添加更清晰的示例,我假设是破解代码。

我认为您的破解代码如下:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Try
    Catch e As Exception
        msgbox(e.Message)
    End Try
End Sub

您可以看到e的两个声明,一个在ByVal e As System.EventArgs,另一个在Catch e As Exception

答案 1 :(得分:9)

该错误消息表示您正在声明一个名称已存在的变量:

int abc = 0;
if (abc == 0)  {
  int abc = 1;  // Error
}

这条规则当然适用于尝试..捕获。

答案 2 :(得分:0)

是。将导致问题的变量重命名为唯一名称。