加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb.net – 在for循环中声明的变量.如何将其编译为编译时错误?

发布时间:2020-12-17 00:02:51 所属栏目:大数据 来源:网络整理
导读:今天我调查了我们软件中的逻辑错误,并发现这与循环中VB.NET线程变量的方式有关. 假设我有以下代码: Dim numbers As New List(Of Integer) From {1,2,3,4,5} For Each number As Integer In numbers Dim isEven As Boolean If number Mod 2 = 0 Then isEven
今天我调查了我们软件中的逻辑错误,并发现这与循环中VB.NET线程变量的方式有关.

假设我有以下代码:

Dim numbers As New List(Of Integer) From {1,2,3,4,5}
    For Each number As Integer In numbers

        Dim isEven As Boolean

        If number Mod 2 = 0 Then
            isEven = True
        End If

        If isEven Then
            Console.WriteLine(number.ToString() & " is Even")
        Else
            Console.WriteLine(number.ToString() & " is Odd")
        End If

    Next

产生以下输出

1 is Odd
2 is Even
3 is Even
4 is Even
5 is Even

问题是isEven已声明但未分配.
在这种特定情况下,将dim isEven写为Boolean = false是正确的,但我没有这样做.

在VB.NET中,在for循环中声明的变量保留其下一次itaration的值.这是设计:http://social.msdn.microsoft.com/Forums/en/vblanguage/thread/c9cb4c22-d40b-49ff-b535-19d47e4db38d但这也是程序员的危险陷阱.

但是,直到现在,我还没有意识到这个问题/行为.到现在.
我们的大多数代码库都是C#,它不允许使用未初始化的变量,所以没有问题.

但我们有一些用VB.NET编写的遗留代码,我们必须支持.

我不认为我们的开发团队中的任何人都曾经有目的地使用过这个.如果我明确想要在for循环内的迭代中共享一个变量,我将它声明在范围之外.

因此,最好的办法是在这种特定情况下产生警告甚至错误.
但即使使用Option Explicit / Option Strict,也不会产生警告/错误.

有没有办法使这个编译时错误或者可能用FxCop检查这个?

I don’t think that anyone of our dev team has ever used this with purpose. If I explicitly want to share a variable over iterations inside a for loop,I declare it outside the scope.

我认为在循环中声明变量的重点是明确地将其范围限制为该块.要使这成为编译时错误,将从语言中删除块级范围.虽然确实存在方法级范围合理的情况,但毫无疑问也存在块级范围重要性的情况.我不认为你可以轻易地从语言中删除它,而不引入一些新的语法方法来使用它.此时您正在进入重新设计VB.NET的领域 – 我不确定是否有一种简单的方法可以做到这一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读