2013-04-08 2 views
0

Я создаю класс для обработки записей в реестре для моего приложения, но у меня возникают некоторые проблемы на раннем этапе.Как разрешить ошибки при использовании словаря

В нижеследующем, он должен взять все ключи/значения для 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 
+0

Где вы создаете новый экземпляр RegKeys внутри MyRegistry? В конструкторе у вас нет и в get_registry_keys вы используете его, когда он все еще Null. –

+0

Не объявляет ли это, что это свойство класса создает его? Я сделал это прямо в 'Public Class MyRegistry'. Благодарю. –

ответ

2

Вы не инициализация вашего RegKeys объекта

Попробуйте изменить эту строку:

Public RegKeys As Dictionary(Of String, String) 

к этому:

Public RegKeys As New Dictionary(Of String, String) 

Это обеспечит словарь инициализируется, когда создается класс

+0

Спасибо, что сделал трюк. Ошибка новичка! –

+0

@DavidGard - проблем нет. Пожалуйста, не забудьте пересмотреть любые ответы, которые помогли вам, и отметить соответствующий ответ в качестве решения. –

+0

Я нахожусь, не беспокойтесь. Это не позволит мне отмечать их так, как они отвечали, до тех пор, пока х минут не было, поэтому пришлось ждать и вернуться в этом случае. –

1

Эта линия

Public RegKeys As Dictionary(Of String, String) 

объявляет переменную типа словаря (ссылка типа), но эта переменная не является экземпляром Словаря. Чтобы стать действительным экземпляром, вам необходимо создать экземпляр с помощью нового

Public RegKeys = new Dictionary(Of String, String) 
Смежные вопросы