C# - 未处理的异常“System.NullReferenceException”

时间:2013-09-01 16:33:25

标签: c# exception error-handling

尝试查找不存在的注册表项时,会抛出未处理的异常。

看起来当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;
        }
    }

我试过if(checkKey(path)!= null& checkKey(path).GetValue(subpath)!= 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 个答案:

答案 0 :(得分:0)

您需要使用逻辑AND运算符(&&)而不是逐位AND运算符(&),将代码更改为:

if (checkKey(path) != null && checkKey(path).GetValue(subpath) != null)

答案 1 :(得分:0)

返回null时可以执行GetValue()。尝试将代码更改为

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;
    }
}