C# 定义字典

方法一

C# 复制代码
       Dictionary<string, string> StateCodesDic = new Dictionary<string, string>();
            StateCodesDic.Add("Johor", "01");
            StateCodesDic.Add("Kedah", "02");
            StateCodesDic.Add("Kelantan", "03");
            StateCodesDic.Add("Melaka", "04");

            StateCodesDic.Add("Negeri Sembilan", "05");
            StateCodesDic.Add("Pahang", "06");
            StateCodesDic.Add("Pulau Pinang", "07");
            StateCodesDic.Add("Perak", "08");
            StateCodesDic.Add("Perlis", "09");

            StateCodesDic.Add("Selangor", "10");
            StateCodesDic.Add("Terengganu", "11");
            StateCodesDic.Add("Sabah", "12");
            StateCodesDic.Add("Sarawak", "13");
            StateCodesDic.Add("Wilayah Persekutuan Kuala Lumpur", "14");
            StateCodesDic.Add("Wilayah Persekutuan Labuan", "15");
            StateCodesDic.Add("Wilayah Persekutuan Putrajaya", "16");
            StateCodesDic.Add("Not Applicable", "17");

方法二

你的代码逻辑是要根据 tempStateID = "KUALA" 匹配到 "Wilayah Persekutuan Kuala Lumpur" 并返回对应的编码 "14"

问题分析

  1. 当前代码的问题

    • 你使用了 lowerCaseDictionary,但 "KUALA" 并不直接匹配 "wilayah persekutuan kuala lumpur"(全小写)。
    • 你的 FindModel 使用了 Contains 查询,但 "kuala" 只是部分匹配,需要确保查询方式正确。
  2. 优化方案

    • 直接遍历 StateCodesDic,检查 Key 是否包含 tempStateID(不区分大小写)。
    • 使用 StringComparison.OrdinalIgnoreCase 进行不区分大小写的比较。

修改后的代码

csharp 复制代码
public ActionResult TestDemo()
{
    Dictionary<string, string> StateCodesDic = new Dictionary<string, string>
    {
        { "Johor", "01" },
        { "Kedah", "02" },
        { "Kelantan", "03" },
        { "Melaka", "04" },
        { "Negeri Sembilan", "05" },
        { "Pahang", "06" },
        { "Pulau Pinang", "07" },
        { "Perak", "08" },
        { "Perlis", "09" },
        { "Selangor", "10" },
        { "Terengganu", "11" },
        { "Sabah", "12" },
        { "Sarawak", "13" },
        { "Wilayah Persekutuan Kuala Lumpur", "14" },
        { "Wilayah Persekutuan Labuan", "15" },
        { "Wilayah Persekutuan Putrajaya", "16" },
        { "Not Applicable", "17" }
    };

    string tempStateID = "KUALA";
    string msg = "17"; // 默认值,未匹配时返回 "17"
    dynamic FindModel = new { Key = "", Value = "" };

    // 遍历字典,查找 Key 包含 "KUALA"(不区分大小写)的项
    foreach (var item in StateCodesDic)
    {
        if (item.Key.IndexOf(tempStateID, StringComparison.OrdinalIgnoreCase) >= 0)
        {
            FindModel = new { Key = item.Key, Value = item.Value };
            msg = item.Value;
            break; // 找到第一个匹配项后退出循环
        }
    }

    return Json(new
    {
        Data = FindModel,
        keyCode = msg
    });
}

关键优化点

  1. 直接遍历 StateCodesDic
    • 不需要额外转换大小写,直接使用 IndexOf + StringComparison.OrdinalIgnoreCase 进行模糊匹配。
  2. 更高效的匹配方式
    • item.Key.IndexOf(tempStateID, StringComparison.OrdinalIgnoreCase) >= 0 检查 Key 是否包含 "KUALA"(不区分大小写)。
  3. 默认值处理
    • 如果没有匹配项,默认返回 "17"(对应 "Not Applicable")。

测试结果

  • tempStateID = "KUALA" 时,会匹配到 "Wilayah Persekutuan Kuala Lumpur",返回:

    json 复制代码
    {
        "Data": { "Key": "Wilayah Persekutuan Kuala Lumpur", "Value": "14" },
        "keyCode": "14"
    }
  • 如果 tempStateID = "JOHOR",则返回:

    json 复制代码
    {
        "Data": { "Key": "Johor", "Value": "01" },
        "keyCode": "01"
    }
  • 如果 tempStateID = "XXX"(无匹配),则返回:

    json 复制代码
    {
        "Data": { "Key": "", "Value": "" },
        "keyCode": "17"
    }

这样就能正确获取到 "14" 这个编码了! 🚀

相关推荐
地藏Kelvin17 分钟前
Spring Ai 从Demo到搭建套壳项目(二)实现deepseek+MCP client让高德生成昆明游玩4天攻略
人工智能·spring boot·后端
菠萝011 小时前
共识算法Raft系列(1)——什么是Raft?
c++·后端·算法·区块链·共识算法
长勺1 小时前
Spring中@Primary注解的作用与使用
java·后端·spring
小奏技术2 小时前
基于 Spring AI 和 MCP:用自然语言查询 RocketMQ 消息
后端·aigc·mcp
编程轨迹2 小时前
面试官:如何在 Java 中读取和解析 JSON 文件
后端
lanfufu2 小时前
记一次诡异的线上异常赋值排查:代码没错,结果不对
java·jvm·后端
编程轨迹2 小时前
如何在 Java 中实现 PDF 与 TIFF 格式互转
后端
编程轨迹2 小时前
面试官:你知道如何在 Java 中创建对话框吗
后端
编程轨迹2 小时前
深入理解 Java 中的信号机制
后端
夕颜1112 小时前
让 cursor 教我用 cursor 的隐藏技能
后端·trae