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" 这个编码了! 🚀

相关推荐
东风破_6 小时前
从跨域到 WebSocket:前端跨域方案、SSE 与双向实时通信详解
前端·后端
行百里er8 小时前
Gateway 上别硬塞 MVC:DeferredImportSelector 看菜下锅
spring boot·后端·开源
名字还没想好☜8 小时前
Java 遍历时删元素抛 ConcurrentModificationException:fail-fast 原理与三种正确删法
后端
IT_陈寒9 小时前
React Hooks闭包陷阱差点让我加班到凌晨
前端·人工智能·后端
码事漫谈9 小时前
本体论,彻底懂
后端
创新技术阁10 小时前
FastapiAdmin 系统日志体系与核心配置参数详解
前端·后端·fastapi
掘金者阿豪10 小时前
SQL Server 迁到金仓,真正麻烦的不是数据,而是这些 T-SQL
后端
Kyrie_kk10 小时前
Java--IO--Path文件访问
java·后端
wxwx_bscxy32210 小时前
基于springboot宠物领养系统的设计与实现
数据库·spring boot·后端·spring·宠物
分支预测失败11 小时前
RISC-V AIA 中断架构实战:从 PLIC 到 APLIC 与 IMSIC 的迁移
linux·后端