vb.net - 变量“测试”在封闭块中隐藏变量
问题描述
我遇到了一个我无法真正解释的问题。
据我所知,如果我在 if 语句中声明一个变量,它会在 if 结束后处理。但是视觉工作室告诉我它隐藏了封闭块变量,即使第一个声明不再存在。
我在这里错过了什么吗?
为了测试它是否重复,我使用以下代码在测试项目中复制了它:
Public Sub New()
If True Then
Dim test As String
End If
Dim test As String
End Sub
解决方案
这是 Microsoft 团队做出的设计决定。我从这个网站得到它。他们还引用了 Microsoft Connect(他们的示例与您的类似,但他们使用的变量是dt
):
我们提供的帮助是阅读代码的用户永远不会对“dt”指的是什么感到困惑:他们不必特别注意范围。
但是当我在互联网上搜索 BC30616 或 CS0136 时,我只看到那些不了解如何更改代码以消除错误的人的帮助请求。
就个人而言,我认为这个错误是有帮助的。我敢打赌,如果我们删除了错误,我们会收到更多论坛帖子,人们会问他们的代码为什么不起作用......
所以,是的,基本上他们认为procedure scope
是一个涉及变量命名的范围,并且由于范围“开始”之前,if
他们假设外部范围中的任何变量都可以隐藏内部范围中的变量,即使它是在封闭之后声明的if
范围。当然,该程序不会倒退,所以这应该不是问题,但他们这样做是因为他们认为如果他们以这种方式表示潜在问题,那么对于不了解范围如何工作的新手来说,他们会遇到更少的问题,而有经验的程序员只会修复他们的代码并继续前进。
很高兴找到顺便说一句。
推荐阅读
- matplotlib - ax.lines 包含没有 x 和 y 坐标的线对象
- java - Java中的JDatePicker日期差异
- kubernetes - Cert-Manager 未颁发任何证书 Google Cloud Kubernetes
- c++ - C2280:不可复制值类型的 boost::container::map 不能是 std::move()'d?
- android - firebase java.lang.IllegalStateException 导致的崩溃
- gravity-forms-plugin - 如何在gravityforms的多页表单中使用上一页的参数填充字段?
- javascript - 试图创建一个数组来定位动画对象
- git - 当我 Git 提交时,找不到 cmd.exe
- vb.net - 当 PictureBox1 碰到 PictureBox2 时加点
- asp.net-core - 在 Abp 框架 .NET Core 3 中使用具有非英语文化的公历日期