【问题标题】:Visual Basic - Array loses values outside For Each loopVisual Basic - 数组在 For Each 循环之外丢失值
【发布时间】:2015-11-10 16:10:13
【问题描述】:

我有一个轻微的编码问题,该数组丢失了 For Each 循环之外的所有值。我尝试了许多解决方案。我可以在循环内正确地看到所有数据(尝试在循环内循环整个数组,包含所有值),但是一旦它退出,数组就是空的。

尝试将 sub 外部的临时数组也声明为 public。任何想法,将不胜感激。在我的绳索尽头:-(

PS: HSarray 在模块中被声明为友元。

公开课高分表格

Private TempArray(0) As Integer

Private Sub ScoreGet()

    Dim Counter As Integer = 0

    'Oppretter textfieldParser, Leser alle linjer fra tekstfil inn i array
    Using MyReader As New Microsoft.VisualBasic.
                    FileIO.TextFieldParser(ScoreFile)
        MyReader.TextFieldType = FileIO.FieldType.Delimited
        MyReader.SetDelimiters(",")
        Dim currentRow As String()
        While Not MyReader.EndOfData
            Try
                currentRow = MyReader.ReadFields()
                Dim currentField As String
                For Each currentField In currentRow

                    'Øker størrelsen på Array per linje / Kjøring av løkke
                    If Counter > 0 Then

                        'Skriver verdi til siste index i array
                        Counter = Counter + 1
                        ReDim Preserve TempArray(Counter)

                        TempArray(Counter) = currentField


                        'Hvis løkke kjører for første gang, skriv verdi til index 0, fortsett    
                    ElseIf Counter < 1

                        TempArray(Counter) = currentField
                        Counter = Counter + 1

                    End If


                Next
                'TempArray stops containing data here----WHY????


            Catch ex As Microsoft.VisualBasic.
                        FileIO.MalformedLineException
                MsgBox("OBS! Noe gikk galt ved uthenting av high score")
            End Try
        End While
    End Using


    'Sorterer array etter data-størrelse - Noe kødd her!!
    TempArray.Sort(TempArray)
    TempArray.Reverse(TempArray)



    'Skriver de 5 første (og største) verdiene i temp-array til liste shared array i modul
    Array.Copy(TempArray, HSarray, 5)




    'Sletter innhold
    'Erase TempArray
    'ReDim TempArray(0)

End Sub

【问题讨论】:

  • 你真的不需要在.NET中使用ReDim之类的东西——看看List(Of T)之类的东西
  • 我会调查的。谢谢!

标签: arrays vb.net for-loop


【解决方案1】:

数组变量必须在过程级别声明。见https://msdn.microsoft.com/en-us/library/w8k3cys2.aspx您只能在过程级别使用 ReDim。因此,变量的声明上下文必须是一个过程;它不能是源文件、命名空间、接口、类、结构、模块或块。我会尝试再次在过程级别声明它,但这次没有 size 参数.

Dim TempArray() As Integer

然后删除 If counter &gt; 0 和整个 Else 子句,以便每次循环时都 Redim。

【讨论】:

  • A 尝试在子例程中声明它(如其他类似示例所示)。没运气。使用 ArrayList (速度较慢,但​​动态)。像魅力一样工作:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 2015-11-12
相关资源
最近更新 更多