全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

c# 枚举 enum 的用法

实用安全的enum需显式指定底层类型(如byte)和值,避免默认递增;字符串转换须处理大小写、空值;Flags枚举值必须为2的幂;API中慎用enum序列化,优先DTO映射。

怎么定义一个实用又安全的 enum

直接用 enum 关键字就能定义,但关键在“底层类型”和“值分配”是否合理。默认是 int,从 0 开始递增,看似省事,但容易埋坑——比如你后续想加新项插在中间,所有后续值都会偏移。

  • 显式赋值更可控:enum HttpStatusCode { OK = 200, BadRequest = 400, NotFound = 404 }
  • 小范围取值(如状态码 0–255)优先选 byte:节省内存,且编译器会强制检查越界 —— enum Status : byte { Idle = 0, Running = 1, Error = 255 }
  • 避免跳着赋值(如 A = 1, B = 100, C = 101),除非真有语义需求;否则别人读代码时容易误判连续性

字符串 ↔ 枚举转换时最常踩的三个坑

ToString()Enum.TryParse() 看似简单,但实际项目里 70% 的枚举解析失败都源于大小写、空格或无效输入没兜住。

  • ToString() 返回的是成员名,不是描述文本(比如 DayOfWeek.Monday.ToString()"Monday",不是 "星期一"
  • Enum.TryParse("monday", out DayOfWeek d) 默认**区分大小写**,会失败;必须加 true 参数:Enum.TryParse("monday", true, out d)
  • 传入空字符串或 null 给 TryParse 会返回 false,但不会抛异常;务必检查返回值,别只依赖 out 变量

[Flags] 位枚举不是“加个特性就完事”

加了 [Flags] 特性后,ToString() 才能输出 "Read, Write" 这种组合形式,但前提是你的值必须是 2 的幂次(1, 2, 4, 8…),否则 HasFlag() 行为不可靠。

[Flags]
public enum Permissions
{
    None = 0,
    Read = 1,
    Write = 2,
    Execute = 4,
    All = Read | Write | Execute // ✅ 正确组合
}

Permissions p = Permissions.Read | Permissions.Write;
Console.WriteLine(p.ToString()); // 输出: "Read, Write"
Console.WriteLine(p.HasFlag(Permissions.Write)); // true
  • 错误示范:Read = 1, Write = 3 —— 3 不是 2 的幂,HasFlag 可能误判
  • 检查权限推荐用 (p & Permissions.Write) == Permissions.Write,比 HasFlag 更明确、性能略高
  • None = 0 必须存在,且不能和其他值做按位或(否则逻辑混乱)

为什么 enum 不该出现在 public API 的 JSON 序列化里

ASP.NET Core 默认把 enum 序列化成整数(如 { "status": 1 }),前端根本看不懂;而设成字符串(JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()))又可能破坏老客户端兼容性。

  • 对外暴露的 API,建议用 string 字段 + 数据验证,或封装一层 DTO 映射到语义清晰的字符串(如 "active", "pending"
  • 内部模块间传递可用 enum,但跨服务/跨语言场景,整数序列化风险高(不同语言 enum 值可能不一致)
  • 如果坚持用 enum 序列化,务必在 Swagger 或 OpenAPI 文档中用 [EnumMember] 显式标注每个值的字符串表示,否则文档和实际行为对不上
枚举本身很简单,但真正难的是在团队协作、长期迭代、跨系统交互中保持它的语义稳定性和可解释性。很多人只记得“用名字代替数字”,却忘了名字一旦发布,改起来比数据库字段还麻烦。


# js  # 前端  # json  # 状态码  # c#  # .net  # 为什么  # String  # NULL  # 封装  # Error  # enum  # 字符串  # int  # public  # 数据库  # 序列化  # 的是  # 文档  # 是在  # 就能  # 出现在  # 很多人  # 不上  # 很简单  # 真有 


相关文章: ,柠檬视频怎样兑换vip?  如何配置WinSCP新建站点的密钥验证步骤?  如何快速搭建安全的FTP站点?  如何挑选高效建站主机与优质域名?  已有域名建站全流程解析:网站搭建步骤与建站工具选择  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  已有域名如何免费搭建网站?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  如何用花生壳三步快速搭建专属网站?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  建站之星各版本价格是多少?  网站制作的步骤包括,正确网址格式怎么写?  网站制作模板下载什么软件,ppt模板免费下载网站?  如何在香港服务器上快速搭建免备案网站?  如何生成腾讯云建站专用兑换码?  网站制作公司排行榜,抖音怎样做个人官方网站  如何高效完成独享虚拟主机建站?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  建站主机解析:虚拟主机配置与服务器选择指南  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  如何自定义建站之星网站的导航菜单样式?  油猴 教程,油猴搜脚本为什么会网页无法显示?  linux top下的 minerd 木马清除方法  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何在IIS中新建站点并配置端口与IP地址?  如何用腾讯建站主机快速创建免费网站?  如何在Windows环境下新建FTP站点并设置权限?  定制建站策划方案_专业建站与网站建设方案一站式指南  如何用狗爹虚拟主机快速搭建网站?  如何通过智能用户系统一键生成高效建站方案?  动图在线制作网站有哪些,滑动动图图集怎么做?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  定制建站是什么?如何实现个性化需求?  小型网站建站如何选择虚拟主机?  如何在云主机上快速搭建网站?  宝塔新建站点报错如何解决?  小型网站制作HTML,*游戏网站怎么搭建?  如何获取免费开源的自助建站系统源码?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何通过二级域名建站提升品牌影响力?  如何通过山东自助建站平台快速注册域名?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  高端网站建设与定制开发一站式解决方案 中企动力  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  建站三合一如何选?哪家性价比更高?  如何在自有机房高效搭建专业网站?  如何通过FTP服务器快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。