C# 枚举运用"位"操作和"或"操作
定义:
/// <summary> /// The js function type(the same as name). /// </summary> [Flags] public enum CallJSFunctionTypes { None = 0, ResetFixedBar = 1 << 1, ResetRequiredField = 1 << 2, SetValidateSuccessTextBoxStyle = 1 << 3, SetValidateFailTextBoxStyle = 1 << 4, ResizeSummary = 1 << 5 //,All = 1 << 6 - 1 }
使用:
//可以先给个初始值. CallJSFunctionTypes JSFunctions = CallJSFunctionTypes.None; //... //可以这样赋值, 想包含什么意义, 就用"与"叠加. JSFunctions = CallJSFunctionTypes.ResetFixedBar | CallJSFunctionTypes.ResetRequiredField | CallJSFunctionTypes.ResizeSummary; //... //判断是否包含某个意义 if ((JSFunctions & CallJSFunctionTypes.ResetFixedBar) == CallJSFunctionTypes.ResetFixedBar) { //Do something. }
原理:
Int32 是 4字节32位二进制
None = 0,
即 0000 0000 0000 0000 0000 0000 0000 0000
ResetFixedBar = 1 << 1,
即 0000 0000 0000 0000 0000 0000 0000 0001 -> 0000 0000 0000 0000 0000 0000 0000 0010
ResetRequiredField = 1 << 2,
即 0000 0000 0000 0000 0000 0000 0000 0001 -> 0000 0000 0000 0000 0000 0000 0000 0100
SetValidateSuccessTextBoxStyle = 1 << 3,
即 0000 0000 0000 0000 0000 0000 0000 0001 -> 0000 0000 0000 0000 0000 0000 0000 1000
SetValidateFailTextBoxStyle = 1 << 4,
即 0000 0000 0000 0000 0000 0000 0000 0001 -> 0000 0000 0000 0000 0000 0000 0001 0000
ResizeSummary = 1 << 5,
即 0000 0000 0000 0000 0000 0000 0000 0001 -> 0000 0000 0000 0000 0000 0000 0010 0000
All = 1 << 6 - 1
即 0000 0000 0000 0000 0000 0000 0010 0000 -> 0000 0000 0000 0000 0000 0000 0011 1111
赋值的时候:
ResetFixedBar|SetValidateSuccessTextBoxStyle|ResizeSummary
即
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 1000
0000 0000 0000 0000 0000 0000 0010 0000
____________________________________
0000 0000 0000 0000 0000 0000 0010 1010
判断的时候:
判断有没有ResetFixedBar, 相"与"(&)
0000 0000 0000 0000 0000 0000 0010 1010
0000 0000 0000 0000 0000 0000 0000 0010
____________________________________
0000 0000 0000 0000 0000 0000 0000 0010 即ResetFixedBar, 即存在ResetFixedBar
判断有没有ResetRequiredField, 相"与"(&)
0000 0000 0000 0000 0000 0000 0010 1010
0000 0000 0000 0000 0000 0000 0000 0100
____________________________________
0000 0000 0000 0000 0000 0000 0000 0000 即不存在ResetFixedBar
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构