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

posted @   xachary  阅读(737)  评论(0编辑  收藏  举报
编辑推荐:
· 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语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示