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

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
大勇前进3 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu3 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile3 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白803 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙3 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发3 天前
软件工程SOLID 五大设计原则
后端·软件工程