You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何创建字符串索引嵌套字典 提示F1索引不存在如何解决

问题原因

你代码的问题出在嵌套Dictionary的初始化语法使用错误。
你当前采用的 ["F1"] = { ... } 写法属于C#集合初始化器的增量初始化语法,它的执行逻辑是:先读取外层字典中F1键对应的已实例化的内部Dictionary<string, string>对象,再往该对象中追加键值对。但你在初始化外层fixers字典的阶段,F1对应的内部字典还没有被创建,程序尝试读取不存在的F1键就会直接抛出索引不存在的异常。

修复方案

给每一个内层的Dictionary显式添加实例化声明即可,修复后的完整代码如下(代码内的英文说明已同步翻译为中文):

private Dictionary<string, Dictionary<string, string>> fixers = new Dictionary<string, Dictionary<string, string>>
{
    ["F1"] = new Dictionary<string, string>
    {
        ["PrefName"] = "KillF1UnhelpfulHelp",
        ["Img"] = @"/graphics/F1key.png",
        ["Title"] = @"禁用F1「帮助」功能",
        ["Description"] = @"
            你有没有过不小心按到F1键,结果弹出一个毫无用处还干扰当前操作的窗口或者网页的经历?
            Windows默认将F1键绑定到了通用帮助功能,这个功能几乎从来派不上用场,还总是打断正常操作。
            开启这个配置项就可以禁用这个烦人的默认设计。注意部分程序会自行处理F1键的响应,
            但这个修改至少可以阻止资源管理器等系统组件的默认F1帮助行为。
            ",
        ["Tags"] = "#键盘,#暴躁刚需"
    },
    ["CMD"] = new Dictionary<string, string>
    {
        ["PrefName"] = "RestoreAdminCMDContext",
        ["Img"] = @"/graphics/CMD.png",
        ["Title"] = @"恢复资源管理器右键菜单的「在此处打开管理员CMD窗口」选项",
        ["Description"] = @"
            你需要用CMD执行命令的时候,往往都是在特定文件夹下操作。旧版Windows系统按住CTRL右键点击文件夹的时候,
            会出现「在此处打开CMD」的选项,这个配置项可以恢复这个功能,而且默认就是管理员权限,也不需要你按CTRL才能显示。
            ",
        ["Tags"] = "#资源管理器,#效率工具"
    }
};

如果你使用的是C# 9及更高版本,可以利用目标类型推导特性,将内层的new Dictionary<string, string>简化为new(),代码会更简洁。


内容的提问来源于stack exchange,提问作者not_a_generic_user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:27:01