2015-03-17 2 views
1

Я пытаюсь заполнить список с помощью некоторых данных реестра, используя этот код.Listview Item всегда null

private void button1_Click(object sender, EventArgs e) 
{ 
    ListViewItem lvItem = null; 
    RegistryKey uninstallKey = Registry.LocalMachine.OpenSubKey(UninstallPath); 
    if (uninstallKey != null) 
     foreach (var subKey in uninstallKey.GetSubKeyNames()) 
     { 
      using (RegistryKey key = uninstallKey.OpenSubKey(subKey)) 
      { 
       if (key != null) 
       { 
        lvItem = 
         new ListViewItem(key.GetValue("DisplayName").ToString()); 
        lvItem.SubItems.Add(key.GetValue("Publisher").ToString()); 
       } 
      } 
      listView1.Items.Add(lvItem); 
     } 
    } 
} 

Все в порядке при отладке приложения. Нет ничего пустого до тех пор, пока точка останова не окажется здесь

lvItem = new ListViewItem(key.GetValue("DisplayName").ToString()); 
lvItem.SubItems.Add(key.GetValue("Publisher").ToString()); 

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

+2

Я думаю, что 'key.GetValue (" DisplayName ")' возвращает 'null', то он сбой в' ToString'. –

ответ

2

Не используйте key.GetValue("Publisher").ToString(), вместо этого используйте (string)key.GetValue("Publisher"). Это связано с тем, что GetValue может вернуть значение null, и если вы попробуете .ToString() на null, вы получите это исключение.

+1

Спасибо, друг – digrev07