变量' '隐藏一个封闭块中的变量

问题描述 投票:3回答:3

从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

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

.net vb.net syntax-error
3个回答
13
投票

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

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

我假设您的破解代码如下:

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


9
投票

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

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.