当前位置: 首页 > news >正文

别再手动写56个民族了!这个 .NET NuGet 包直接拿去用

做后台系统、人员档案、户籍录入这类项目的时候几乎都会碰到一个需求民族下拉框。56 个民族名字要标准、编码要规范、还要支持搜索。以前我偷懒要么直接写死一个枚举要么从网上随便复制一份数据贴到代码里。结果过两个月需求变了要加拼音检索、要按国标编码排序、数据库存的是“01”但前端要显示“汉族”……然后就开始漫长的 if-else 和硬编码。后来实在不想重复造轮子了就整理了一个小组件把民族数据、枚举转换、模糊搜索这些事一次性封装好于是就有了下面这个包。NuGet截图组件长什么样其实就是一套静态方法引入就能用不需要建表也不需要手动初始化。VS搜索出来的样子dotnet add package XiuXian.China.Nations命名空间就一个using XiuXian.China.Nations.Services;最常用的几个操作我先把日常写代码时最常用的场景列一下基本覆盖 80% 的需求。1. 拿全部民族列表绑定下拉框的时候用var nations NationLibrary.GetAll(); // 直接丢给 SelectList 或者前端2. 编码和民族互转数据库存的01汉族要显示汉字var nation NationLibrary.GetByCode(01); string name nation?.Name; // 汉族反过来前端选了“回族”后端要存编码string code NationLibrary.GetCodeByEnum(NationEnum.Hui);3. 模糊搜索用户输入“蒙”、“meng”、“MG”都能搜到蒙古族相关的民族var result NationLibrary.Search(蒙);这个功能在带搜索的下拉框里非常实用不用自己写Contains或者IndexOf了。4. 判断是不是少数民族有时候统计口径需要区分汉族和少数民族if(!nation.IsHan()) { // 少数民族单独处理 }这个数据模型是怎么设计的内部用的NationInfo长这样不复杂但够用public class NationInfo { public string Code { get; set; } // 01-56其他民族99 public string Name { get; set; } // 汉族、回族... public string Pinyin { get; set; } // Han, Hui... public string ShortCode { get; set; } // HZ, HUI 这种简写 public NationEnum EnumValue { get; set; } }json示意图这里有一个坑要提醒一下简码ShortCode是有重复的。比如不同民族可能共用同一个简码所以按简码查会返回多条记录业务上要自己处理。两个排序规则这个细节很多人会忽略。民族列表有时候要按国标编码01 汉族、02 蒙古族…有时候要按拼音首字母白族、藏族、傣族…。组件里直接给了两种// 按拼音排序适合前端展示 var list NationLibrary.OrderByPinyin();拼音排序Json示意图我的建议是政府项目用编码排序互联网项目用拼音排序。别问为什么踩过坑的都知道。一些不太起眼但很舒服的小设计编码自动兼容1和01都能查到汉族不用自己补零。查不到不抛异常返回null或空集合不用包一层try-catch。线程安全 懒加载不用手动 new静态调用就行。这个库适合哪些项目后台管理系统的数据字典人口、户籍、档案类业务需要下拉框 搜索的民族选择组件多个项目之间需要统一民族数据的场景一点个人看法说实话这个组件技术含量不高就是把国家标准数据整理成代码再加几个常用的查询方法。但它减少的是重复劳动的烦躁感。每次新项目都要重新写一遍民族枚举、做拼音转换、处理编码对齐真的很无聊。如果你现在项目里民族数据还是硬编码或写在配置文件里可以试试这个方式。至少下一个人接手代码的时候不用再问“这个民族编码从哪来的”这种问题。文档地址https://www.nuget.org/packages/XiuXian.China.Nations/1.0.0#readme-body-tabhttps://www.nuget.org/packages/XiuXian.China.Nations/1.0.0#readme-body-tabNuGet 版本v1.0.0netstandard2.0;netstandard2.1;net6.0;net8.0;net9.0;net10.0;支持平台示意图如果有什么奇怪的需求比如民族合并、自定义排序可以自己继承扩展。
http://www.zskr.cn/news/1380220.html

相关文章:

  • HDR视频生成进入Sora 2时代:7大不可逆技术拐点、4类版权合规红线、1个即将失效的SDR转制旧范式
  • 什么是GEO全栈获客服务
  • Midjourney模糊不是Bug,是未激活的创意开关:资深提示工程师的6种“可控模糊”叙事技法
  • 如何快速配置D2DX:让经典《暗黑破坏神2》在现代PC上焕发新生的终极指南
  • FlashAttention算子深度解读昇腾NPU上的注意力计算优化
  • 对比直接使用厂商api体验taotoken在路由容灾方面的优势
  • 机器学习加速分子晶体偏振拉曼光谱模拟:非谐效应与准谐效应的分离
  • 《关于 AI Agent 基础设施的一些奇思妙想》
  • 红外信号逆向工程:破解电磁炉协议实现抽油烟机智能联动
  • 线程池面试
  • 修复 PowerShell 7 下 conda activate 报错的指南
  • 别再乱码了!手把手教你为USB设备配置中文字符串描述符(基于USB 2.0/3.0规范)
  • 2026年图片转Word最简单方法|四种姿势对比,手把手教你快速上手
  • Obsidian PDF Plus终极指南:如何实现PDF与笔记的无缝双向链接
  • 网络软文发布平台怎么选?网络软文发布平台最佳性价比平台 - 代码非世界
  • Apple-Mobile-Drivers-Installer:Windows上iPhone USB网络共享驱动的终极解决方案
  • 对比测试显示 Taotoken 在多模型切换时表现稳定
  • 深度解析:JetBrains IDE持续评估方案的技术实现
  • 别再花钱买云服务了!手把手教你在Windows 10上用Nginx搭个免费的RTMP直播服务器
  • Windows 11终极优化指南:一键清理系统,释放51%性能潜力
  • ComfyUI-WanVideoWrapper深度解析:构建专业级AI视频生成工作流的完整方案
  • AI算力服务器选型避坑:2026中小企业算力部署实战指南 - 智恒百亿
  • 佛山凯迪拉克二手车选购:检测与售后的技术细节解析 - 奔跑123
  • 不止于画图:深入理解Altium Designer原理图编辑器中的‘栅格’与‘字符串’系统
  • Harness Engineering:智能体任务执行可视化
  • AI辅助急诊精神健康危机识别:从非结构化数据到混合智能决策
  • Armv9-A架构解析:SVE/SME与安全增强技术
  • 2026年成都电缆桥架与抗震支架选型指南:赛创电器与行业头部品牌深度横评 - 优质企业观察收录
  • 国产新模王Qwen3.7-Max,海外开发者已经沸腾了
  • 【分享】DreamFace Ai数字人 内置文本生成视频等