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

本文关键字:System NullReferenceException 异常 未处理 | 更新日期: 2023-09-27 18:29:45

当尝试查找不存在的注册表项时,它会引发未经处理的异常。

看起来当checkKey返回为空并且它正在尝试继续.获取值 它会引发异常。

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

我试过如果(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;
    }

尝试捕获可以解决这个问题,但我觉得我做错了。

亲切问候

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

你可以在返回 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;
    }
}

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

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