Ich schreibe ein Programm zum Füllen einer TXT-Vorlage Datei mit Werten durch Ersetzen von Platzhaltern. Die Werte stammen aus einem Excel-Dokument. Ich lese eine Map-Datei, die Zeile für Zeile 3 Werte enthält; ein Subheader in Excel, der Elementname und der Platzhalter. Diese Werte werden in 3 Arrays platziert und dann zu einem Multi-Key-Wörterbuch kombiniert.vb.net löschen Multi-Key-Wörterbuch
Ich möchte das Programm mehrmals ausführen können, ohne es zu schließen, also muss ich das Wörterbuch löschen, nachdem es fertig ist, damit ich es wieder ausführen kann. Ich konnte nicht löschen mit .clear() und nicht sicher, warum. Es funktioniert, wenn ich es löschen und dann den Inhalt in der gleichen Untergruppe auflisten, aber nicht, wenn ich es in einer Untergruppe lösche und dann versuche, sie in einer anderen Untereinheit zu verwenden. Ich deklariere das Wörterbuch auf Klassenebene und benutze es in mehreren Subs/Funktionen.
'Dictionary
Dim ObjDict As New Dictionary(Of ObjKey, String)
Structure ObjKey
Public CIQ_Obj_Key As String
Public CIQ_Sec_Key As String
Public YAML_Tag_Key As String
End Structure
Dies ist, wie ich das Wörterbuch
Do Until xx = RowUpperBound
If xlWorkSheet.Cells(xx, ObjHeaderColInt).Value = CIQ_Obj_Txt Then
'MsgBox("Found " & CIQ_Obj_Txt & " in row " & xx)
XlCell = CType(xlWorkSheet.Cells(xx, ValHeaderColInt), excel.Range)
If IsNothing(XlCell.Value2) Then
Write_Error_("No value found for " & CIQ_Obj_Txt & " at row " & xx)
Else
CellStr = XlCell.Value2.ToString.Trim
TxtBxDebugBox.Text += "Found " & CIQ_Obj_Txt & ": " & CellStr & " at " & xx & vbNewLine
GlobalVariables.ObjDict.Add(New GlobalVariables.ObjKey() With {.CIQ_Obj_Key = CIQ_Obj_Txt,
.CIQ_Sec_Key = CIQ_Sec_Txt,
.YAML_Tag_Key = YAML_Tag_Txt}, CellStr)
End If
Exit Do
ElseIf xx = (RowUpperBound - 1) Then
Write_Error_("Cannot find " & CIQ_Obj_Txt & " under " & CIQ_Sec_Txt)
Exit Do
End If
xx += 1
Loop
Ich versuchte vor kurzem erklärt, es in einer separaten Klasse bevölkern sind, aber wissen nicht, wie/deaktivieren Sie die Klasse schließen und dann neu deklarieren.
Public Class GlobalVariables
Public Shared ObjDict As New Dictionary(Of ObjKey, String)
Structure ObjKey
Public CIQ_Obj_Key As String
Public CIQ_Sec_Key As String
Public YAML_Tag_Key As String
End Structure
End Class
Danke !!
getan Sie sagen, dass es nicht funktioniert, wenn Sie das Wörterbuch aus einer anderen Methode versuchen und verwenden ... Was genau meinst du durch funktioniert nicht? Exception Details bitte ... Failing alles, objDict.DISspose(), gefolgt von objDict = New DIctionary (von ObkKey, String) sollte den Job erledigen ... –
@MartinMilan, würden Sie denken, würden Sie nicht. Aber aus irgendeinem Grund, der nur Microsoft bekannt ist ... haben Wörterbücher keine Dispose-Methode. –
Welche Ausnahme erhalten Sie? Was ist los? –