2013-09-01 3 views
-3

При попытке найти раздел реестра, который не существует, он генерирует необработанное исключение.C# - необработанное исключение «System.NullReferenceException»

Похоже, когда checkKey возвращается null, и он пытается продолжить .GetValue, он выдает исключение.

public static string getDirectory(string path, string subpath) 
    { 
     if (checkKey(path).GetValue(subpath) != null) 
     { 
      return checkKey(path).GetValue(subpath).ToString(); 
     } 
     else 
     { 
      return null; 
     } 
    } 

Я попытался, если (checkKey (путь)! = NULL & checkKey (путь) .GetValue (подпуть)! = NULL), но это не решило проблему.

public static RegistryKey checkKey(string key) 
    { 
     if (getBaseCurrent64().OpenSubKey(key) != null) 
     { 
      return getBaseCurrent64().OpenSubKey(key); 
     } 
     else if (getBaseLocal64().OpenSubKey(key) != null) 
     { 
      return getBaseLocal64().OpenSubKey(key); 
     } 
     return null; 
    } 

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

Уважение,

+2

Ужасно: не вызывайте метод дважды. Вызовите его один раз, поместите возвращаемое значение в переменную, а затем решите, что с ним делать. – nvoigt

+1

'if (checkKey (path)! = Null && checkKey (path) .GetValue (subpath)! = Null)', причем только одна '&' вторая часть все равно будет выполнена, что вызывает ошибку. '&&' "short circuit", что означает, что если первое не соответствует действительности, второе не будет проверяться. – Corak

ответ

0

Вы можете сделать GetValue() при возврате null. Попытайтесь поменять код на

public static string getDirectory(string path, string subpath) 
{ 
    RegistryKey key = checkKey(path); 
    if (key != null && key.GetValue(subpath) != null) 
    { 
     return key.GetValue(subpath).ToString(); 
    } 
    else 
    { 
     return null; 
    } 
} 
0

Вы должны использовать логический оператор И (&&) вместо побитового И оператора (&), изменить свой код на этот:

if (checkKey(path) != null && checkKey(path).GetValue(subpath) != null) 
Смежные вопросы