1

アプリケーションのレジストリ エントリを処理するクラスを作成していますが、早い段階で問題が発生します。

以下では、SubKey のすべてのキー/値を取得し、それらを に追加する必要がありDictonaryます。コメントアウトされたメッセージ ボックスにはキーと値が正しく表示されますが、関数を実行するたびに、以下の行でエラーが発生しますA first chance exception of type 'System.NullReferenceException'

レジストリ キー自体は問題ないように見えるので、RegKeys Dictonary. 誰かが見てアドバイスしてくれたら、私は感謝します。ありがとう。

これが私がクラスを開始する方法です(私はまだ他に何もしようとしていません)-

Private Sub getMyRegSettings()

        Dim ServerPing As RegistryKey = Registry.CurrentUser.OpenSubKey("ServerPing")
        Dim Servers As RegistryKey = ServerPing.OpenSubKey("Servers")
        Dim MyRegistry As New MyRegistry(Servers)
        Dim RegKeys As Dictionary(Of String, String) = MyRegistry.RegKeys

End Sub

そして、これが私に問題を引き起こしているクラスです-

Public Class MyRegistry

    Public RegKeys As Dictionary(Of String, String)

    Public Sub New(SubKey As RegistryKey)

        get_registry_keys(SubKey)

    End Sub

    Private Sub get_registry_keys(SubKey As RegistryKey)

        ' Print the information from the Test9999 subkey.
        For Each valueName As String In SubKey.GetValueNames() ' Error occurs here

            'MsgBox("Key: " & valueName & vbCrLf & "Value: " & SubKey.GetValue(valueName))
            RegKeys(valueName) = SubKey.GetValue(valueName).ToString()

        Next valueName

    End Sub

End Class
4

2 に答える 2

3

RegKeysオブジェクトを初期化していません

この行を変更してみてください:

Public RegKeys As Dictionary(Of String, String)

これに:

Public RegKeys As New Dictionary(Of String, String)

これにより、クラスの作成時に辞書が確実に初期化されます

于 2013-04-08T15:42:51.637 に答える
1

この行

Public RegKeys As Dictionary(Of String, String)

Dictionary 型 (参照型) の変数を宣言していますが、この変数は Dictionary のインスタンスではありません。有効なインスタンスになるには、new でインスタンス化する必要があります

Public RegKeys = new Dictionary(Of String, String)
于 2013-04-08T15:43:45.867 に答える