操纵不同二进制位代表不同意义的枚举代码示例
很多程序, 尤其是权限相关的代码, 其表示逻辑会用到让不同的二进制位代表不同意义的枚举类型.
对这类枚举类型的操纵和验证的代码是经常要用到的. 于是整理了一个例子列在下面. 代码是反汇编别人的工具得来的, 并非原创.
using System; using System.Data; using System.Text; namespace TestApplication { class Program { enum PermMask : ulong { Empty = 0L, Open = 0x1L, Add = 0x2L, Edit = 0x4L, Delete = 0x8L, Approve = 0x10L, Manage = 0x20L, Apply = 0x40L, FullMask = 0xffL }; static void Main(string[] args) { Type ptype = typeof(PermMask); ulong uPerm = 0x13; Enum ePerm = (Enum)Enum.ToObject(ptype, uPerm); Console.WriteLine("Test value is " + uPerm.ToString() + "\n"); Array vals = Enum.GetValues(ptype); int iMaxLen = 0; foreach (ulong val in vals) { Enum ePerm2 = (Enum)Enum.ToObject(ptype, val); iMaxLen = Math.Max(iMaxLen, ePerm2.ToString().Length); } StringBuilder sb = new StringBuilder(); foreach (ulong val in vals) { sb.AppendFormat("{0," + iMaxLen + "}", ((Enum)Enum.ToObject(ptype, val)).ToString()); sb.Append(" "); sb.Append(val.ToString("X16")); sb.Append(" "); if ((val & uPerm) == val) { sb.Append(" Yes"); } else { sb.Append(" No"); } sb.AppendLine(); } Console.WriteLine(sb.ToString()); } } }
输出结果:
参考资料:
StringBuilder.AppendFormat Method (String, Object)
分类:
.NET and C#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律