VB.NET - For Each循环不改变类数组中的元素

Lou*_*Lou 3 vb.net arrays foreach for-loop class

我正在使用一个类数组; 该类非常简单,只包含一个元素.该类声明如下:

Class Cell
    Public Info As Int16
End Class
Run Code Online (Sandbox Code Playgroud)

数组:

Dim Maze(11, 15) As Cell
Run Code Online (Sandbox Code Playgroud)

我想使用一个简单的子句将每个元素的.Info变量设置为15,但我意识到我必须先创建元素.我尝试使用For Each循环如下,但它不起作用,当循环完成时,所有内容仍然设置为空:

For Each e As Cell In Maze
    If e Is Nothing Then
        e = New Cell
    End If
Next
Run Code Online (Sandbox Code Playgroud)

我不关心正确的解决方案:我使用了常规的For循环,这完成了我想做的一切......

For a = 0 To Maze.GetUpperBound(0)
    For b = 0 To Maze.GetUpperBound(1)
        Maze(a, b) = New Cell
        Maze(a, b).Info = Maze(a, b).Info Or 15
    Next
Next
Run Code Online (Sandbox Code Playgroud)

...但我想知道为什么For Each循环首先不起作用,因为我确信我在这里缺少一些基本原则.

Kar*_*son 5

For Each循环不起作用的原因是因为在For Each构造中,局部变量(在您的情况下e)不是引用,而是副本; 因此你New Cell对你的阵列没有任何影响Cell.

  • 实际上,这是VB.NET如此宽容的后果之一.C#不允许此配置.宽容是好的,但有些时候可能让程序员感到困惑; 在这种情况下,假设e的值实际上正在改变是合乎逻辑的. (2认同)