VB.Net 数组.排序无效值



我在 VB.net 程序中遇到一些严重的问题。我的代码中的所有内容,包括粘贴在此处的内容似乎在整个循环中(在我的代码末尾)中一直起作用,包括用我期望的信息填充 FinalDataArray,但是当我将其传递给 Array.Sort 时,我最终会得到 FinalDataArray 在每个索引处都有一个空值。关于可能导致这种情况的原因的任何想法?

我的代码的适用部分如下:

更新

:我已经更新了我的代码块以显示该程序的整个Sub。

Private Sub btnDisplay_Click(sender As System.Object, e As System.EventArgs) Handles btnDisplay.Click
    frmMain.CurrentFigure = txtFigure.Text
    frmFigureViewer.Show()
    Dim ArrayUpperBound = FGCFigNo.Length
    FigureResult = Enumerable.Range(0, FGCFigNo.Length).Where(Function(f) FGCFigNo(f) = frmMain.CurrentFigure).ToArray
    frmFigureViewer.lblFGCfromFGCList.Text = FGCCode(FigureResult(0))
    frmFigureViewer.lblTOPCurrentFigureTitle.Text = FGCTitle(FigureResult(0))
    frmFigureViewer.lblTOPDisplayFigure.Text = FGCFigNo(FigureResult(0))
    frmFigureViewer.lblCurrentSheet.Text = FGCSheetNo(FigureResult(0))
    frmFigureViewer.lblFinalSheet.Text = FGCSheetNo(FigureResult(FigureResult.Length - 1))
    ArtResult = FGCArtID(FigureResult(frmFigureViewer.lblCurrentSheet.Text - 1))
    Dim JpgFilePath As String = "C:TempStandaloneRPSTLViewer" + "" + Mid(ArtResult, 1, ArtResult.Length - 4) + ".jpg"
    If File.Exists(JpgFilePath) Then
        GoTo OnlyDisplay
    End If
    Dim SourceFile As String = ""
    Dim DestinationFile As String = ""
    Dim EpsFilePath As String = ARTFOLDER + "" + ArtResult
    If Not Directory.Exists("C:TempStandaloneRPSTLViewer") Then
        MkDir("C:TempStandaloneRPSTLViewer")
    End If

    SourceFile = EpsFilePath
    DestinationFile = Mid(EpsFilePath, 1, Len(EpsFilePath) - 4) + " view.eps"
    FileCopy(SourceFile, DestinationFile)
    EpsFilePath = DestinationFile
    RunGS("-q", "-dNOPAUSE", "-dBATCH", "-dSAFER", "-sDEVICE=jpeg", _
      "-r600", "-dJPEGQ=100", "-dEPSCrop", "-dDownScaleFactor=0", "-dTextAlphaBits=4", "-dGraphicsAlphaBits=4", _
      "-sPAPERSIZE=letter", "-sOutputFile=" & JpgFilePath, EpsFilePath)
    Kill(EpsFilePath) 'KILLS THE "...view.eps" temporary file in the working folder.
OnlyDisplay:
    frmFigureViewer.picMyJPEG.Image = Image.FromFile(JpgFilePath)
    Fig036Result = Enumerable.Range(0, FIGURENO.Length).Where(Function(f) FIGURENO(f) = frmMain.CurrentFigure).ToArray
    'BUILD DICTIONARY HERE'
    Dim dict As Dictionary(Of String, String) = New Dictionary(Of String, String)
    Dim DictionaryFigureNumber As Integer = 1
    Dim DictionarySortPosition As Integer = 1
    Do Until DictionaryFigureNumber = 1000
        Dim DictionaryFigureLetterASCII As Integer = 65
        dict.Add(DictionaryFigureNumber, DictionarySortPosition)
        DictionarySortPosition = DictionarySortPosition + 1
        Do Until DictionaryFigureLetterASCII = 91
            dict.Add(DictionaryFigureNumber & Chr(DictionaryFigureLetterASCII), DictionarySortPosition)
            DictionarySortPosition = DictionarySortPosition + 1
            DictionaryFigureLetterASCII = DictionaryFigureLetterASCII + 1
        Loop
        DictionaryFigureNumber = DictionaryFigureNumber + 1
    Loop
    'END OF DICTIONARY BUILDING
    Dim TempLength = Fig036Result.GetLength(0)
    TempLength = TempLength - 1
    Dim CurrentPlace As Integer = 0
    Dim TempItemNo As String
    Dim ArrayString As String = ""
    Do Until CurrentPlace > TempLength
        Dim ArrayLocation As Integer = Fig036Result(CurrentPlace)
        TempItemNo = ITEMNO(ArrayLocation)
        TempSMR = SMnR(ArrayLocation)
        TempNSN = NSN(ArrayLocation)
        TempCAGE = CAGE(ArrayLocation)
        TempPartNum = PARTNUM(ArrayLocation)
        TempDescription = ITEMName(ArrayLocation)
        TempUOC = UOC(ArrayLocation)
        TempQTY = QTYFIG(ArrayLocation)
        TempIndvFGC = FGC(ArrayLocation)
        Dim TempValue As String = ""
        dict.TryGetValue(TempItemNo, TempValue)
        ArrayString = TempValue + "::" + TempItemNo + "|" + TempSMR + "|" + TempNSN + "|" + TempCAGE + "|" + TempPartNum + "|" + TempDescription + "|" + TempUOC + "|" + TempQTY + "|" + TempIndvFGC + "|"
        FinalDataArray(CurrentPlace) = ArrayString
        'FinalSortArray(CurrentPlace) = TempValue
        CurrentPlace = CurrentPlace + 1
    Loop
    Array.Sort(FinalDataArray)
End Sub

更新2:我更新了代码的循环部分,如下所示:

Dim TempValue As String = ""
        dict.TryGetValue(TempItemNo, TempValue)
        ArrayString = TempItemNo + "|" + TempSMR + "|" + TempNSN + "|" + TempCAGE + "|" + TempPartNum + "|" + TempDescription + "|" + TempUOC + "|" + TempQTY + "|" + TempIndvFGC + "|"
        FinalDataArray(CurrentPlace) = ArrayString
        FinalSortArray(CurrentPlace) = TempValue
        CurrentPlace = CurrentPlace + 1
    Loop
    Array.Sort(FinalSortArray, FinalDataArray)

我对两个数组的新声明是:

    Public FinalSortArray(50000) As Integer
Public FinalDataArray(50000) As String

我认为你的问题是你不知道数组到底有多大,它比你预期的要大,Array.Sort从后面重新填充数组......考虑:

Dim arr() As String
ReDim arr(10)
arr(0) = "Z"
arr(2) = "3"
arr(1) = "Boolean"
arr(5) = "Hello"
Array.Sort(arr)
For i As Integer = 0 To 10
  Debug.Print(arr(i))
Next

即使我将数组的大小指定为 11 并且只用数据填充了 4 个随机点,但在Array.Sort之后,我的数据在数组的后面排序,只有arr(7)...arr(10)包含数据(按正确的顺序)。

最新更新