プレースホルダを置き換えることによって.txtテンプレートファイルに値を設定するプログラムを作成しています。値はExcelドキュメントから得られます。 私は、行ごとに3つの値を含むマップファイルを読んでいます。 Excelのサブヘッダ、要素名、およびプレースホルダー。これらの値は3つの配列に配置され、次に複数キーの辞書に結合されます。vb.net clear multi-key dictionary
プログラムを終了することなく何度も実行できるようにしたいので、実行が終了した後に辞書をクリアして、再度実行する必要があります。私は.clear()を使用してクリアすることができず、理由を確認できませんでした。 それは私がそれをクリアし、同じサブにコンテンツを一覧表示するが、私は1つのサブでそれをクリアし、別のサブでそれを使用しようとしないときに動作します。 私は、クラスレベルで辞書を宣言し、それを複数のサブ/関数で使用しています。
'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
これは私が最近、別々のクラスでそれを宣言しようとしたが、それをクラスを閉じて再度宣言/クリアする方法がわからない、私は辞書に
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
に移入されている方法です。
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
ありがとう!!
が終わったら...あなたは正確に何を意味するのかbyはうまくいかない?例外の詳細をしてください...失敗したすべて、objDict.DIspose()の後にobjDict =新しいDIctionary(ObkKey、Stringの)は仕事をする必要があります... –
@MartinMilan、あなたはそう思わないでしょう。しかし、Microsoftにしか知られていない何らかの理由で...辞書にはDisposeメソッドがありません。 –
何の例外がありますか?何が起こっている? –