Dictionary KeyNotFoundException,即使Key存在
本文关键字:Key 存在 即使 KeyNotFoundException Dictionary | 更新日期: 2023-09-27 18:28:47
我有一个RegistryKey
作为字典的键。
我似乎无法为该特定键设置值。无论我做什么,我都会得到KeyNotFoundException
。密钥确实存在,我在前一行创建了它
例如:
public Dictionary<RegistryKey, Dictionary<string, object>> subKeyNodes = new...
subKeyNodes.Add(mainKeyNode.CreateSubKey(keyName),new Dictionary<string, object>());
subKeyNodes[mainKeyNode.CreateSubKey(keyName)].Add("ROAR", "value");
Add运行良好。添加那个键值总是失败的,我似乎无法理解。
更好的方法是向Dictionary的构造函数提供实现IEqualityComparer<RegistryKey>
的东西——这样,就不需要包装每个对象。
RegistryKey
既没有GetHashCode
覆盖,也没有Equals
覆盖。这意味着RegistryKey
的实例将使用默认实现(在Object
中定义)。因此,即使RegistryKey
的两个实例的字段相同,它们也不会被标识为"相等"。这意味着您不能将此类的实例用作基于哈希的集合(如Dictionary
或HashSet
)的键。
作为一种变通方法,您可以定义另一个封装RegistryKey
并定义这些方法重写的类。
CreateSubKey可能每次调用都会返回一个新的对象实例。因此,调用两次会给您不同的对象(即使它们可能引用相同的注册表项)。您应该存储对CreateSubKey的第一次调用的结果,而不是再次调用它。或者使用关键字名称而不是对象作为字典的关键字。