首页 > 解决方案 > 变量“测试”在封闭块中隐藏变量

问题描述

我遇到了一个我无法真正解释的问题。

据我所知,如果我在 if 语句中声明一个变量,它会在 if 结束后处理。但是视觉工作室告诉我它隐藏了封闭块变量,即使第一个声明不再存在。

我在这里错过了什么吗?

为了测试它是否重复,我使用以下代码在测试项目中复制了它:

    Public Sub New()

        If True Then

            Dim test As String

        End If

        Dim test As String

    End Sub

标签: vb.net

解决方案


这是 Microsoft 团队做出的设计决定。我从这个网站得到它。他们还引用了 Microsoft Connect(他们的示例与您的类似,但他们使用的变量是dt):

我们提供的帮助是阅读代码的用户永远不会对“dt”指的是什么感到困惑:他们不必特别注意范围。

但是当我在互联网上搜索 BC30616 或 CS0136 时,我只看到那些不了解如何更改代码以消除错误的人的帮助请求。

就个人而言,我认为这个错误是有帮助的。我敢打赌,如果我们删除了错误,我们会收到更多论坛帖子,人们会问他们的代码为什么不起作用......

所以,是的,基本上他们认为procedure scope是一个涉及变量命名的范围,并且由于范围“开始”之前,if他们假设外部范围中的任何变量都可以隐藏内部范围中的变量,即使它是在封闭之后声明的if范围。当然,该程序不会倒退,所以这应该不是问题,但他们这样做是因为他们认为如果他们以这种方式表示潜在问题,那么对于不了解范围如何工作的新手来说,他们会遇到更少的问题,而有经验的程序员只会修复他们的代码并继续前进。

很高兴找到顺便说一句。


推荐阅读