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 KeyNotFoundException,即使Key存在

更好的方法是向Dictionary的构造函数提供实现IEqualityComparer<RegistryKey>的东西——这样,就不需要包装每个对象。

RegistryKey既没有GetHashCode覆盖,也没有Equals覆盖。这意味着RegistryKey的实例将使用默认实现(在Object中定义)。因此,即使RegistryKey的两个实例的字段相同,它们也不会被标识为"相等"。这意味着您不能将此类的实例用作基于哈希的集合(如DictionaryHashSet)的键。

作为一种变通方法,您可以定义另一个封装RegistryKey并定义这些方法重写的类。

CreateSubKey可能每次调用都会返回一个新的对象实例。因此,调用两次会给您不同的对象(即使它们可能引用相同的注册表项)。您应该存储对CreateSubKey的第一次调用的结果,而不是再次调用它。或者使用关键字名称而不是对象作为字典的关键字。