从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
我不明白为什么第一个导致问题,第二个不导致问题,对我而言,就像......使用上面的苹果,下面的苹果 - 说你不能使用同样的东西在这两个地方,然后将两者都改为橙子并突然让它发挥作用。当然第二个与第一个相同。
答案 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)
是。将导致问题的变量重命名为唯一名称。