我有RegistryKey
作为我字典的密钥。
我似乎无法为该特定键设置值。无论我做什么,我都会得到KeyNotFoundException
。 Key确实存在,我之前创建了一行
e.g:
public Dictionary<RegistryKey, Dictionary<string, object>> subKeyNodes = new...
subKeyNodes.Add(mainKeyNode.CreateSubKey(keyName),new Dictionary<string, object>());
subKeyNodes[mainKeyNode.CreateSubKey(keyName)].Add("ROAR", "value");
添加工作正常。添加该键值总是失败,我似乎无法弄明白。
答案 0 :(得分:4)
更好的方法是向Dictionary的构造函数提供实现IEqualityComparer<RegistryKey>
的东西 - 这样,您就不需要包装每个对象。
答案 1 :(得分:2)
RegistryKey
既没有GetHashCode
也没有Equals
覆盖。这意味着RegistryKey
的实例将使用默认实现(在Object
中定义)。因此,RegistryKey
的两个实例即使其字段相同也不会被识别为“相等”。这意味着您不能将此类的实例用作基于散列的集合的键,例如Dictionary
或HashSet
。
作为一种变通方法,您可以定义另一个包装RegistryKey
的类并定义这些方法覆盖。
答案 2 :(得分:1)
CreateSubKey可能会返回一个新的对象实例。因此,调用它两次将为您提供不同的对象(即使它们可能引用相同的注册表项)。您应该将第一次调用的结果存储到CreateSubKey,而不是再次调用它。或者使用键名而不是对象作为词典的键。