zoukankan      html  css  js  c++  java
  • 2019-9-2-C#枚举中使用Flags特性

    title author date CreateTime categories
    C#枚举中使用Flags特性
    lindexi
    2019-09-02 12:57:37 +0800
    2018-2-13 17:23:3 +0800
    C#

    如果对一个值可以包含多个,那么可以使用枚举,加上Flags 本文告诉大家如何写一个 Flags。

    在写前,需要知道一些基础知识,取反、或、与,如果不知道的话,请去看看基础。

    当然,这些太复杂了,我也不会在这里解释。

    假如有类型 Show 的定义如下

        [Flags]
        public enum Show
        {
            A = 0x00000001,
            B = 0x00000010,
            C = 0x00000100,
            D = 0x00001000,
        }

    合并多个值

    合并多个,使用 |

      Show show=Show.A | Show.B

    枚举通过这个方法可以在一个变量包含多个值

    判断是否存在某个值

    一个简单方法是用 HasFlag,但是一个方法是用 &

      Show show = Show.A | Show.B;
      show.HasFlag(Show.A);
      //其他
      bool 包含 = (show & Show.A) !=0 ;

    从性能上看通过 & 的性能会比 HasFlag 高,但是从可读性上 HasFlag 更友好,如果你的代码没有性能问题推荐使用 HasFlag 方法

    只要一个 enum 使用了 Flags 标记就可以使用 HasFlag 方法

    去掉一个值

      Show show=Show.A | Show.B;
      show=show & (~Show.A);

    取反一个值

      Show show=Show.A | Show.B;
      bool 包含=(show & Show.A)!=0;
      if(包含)
      {
         show=show & (~Show.A);
      }
      else
      {
         show=show | Show.A;
      }

    需要知道在以前,写枚举的值,不是二进制,现在C#7可使用二进制

        [Flags]
        public enum Show
        {
            A = 0b00000001,
            B = 0b00000010,
            C = 0b00000100,
            D = 0b00001000,
        }

    于是这样就可以合并多个值,用一个 byte 表示一个值

    参见:http://www.cnblogs.com/jhxk/articles/1738831.html

  • 相关阅读:
    es6 yield简单使用
    es6 generator 函数中的yield理解
    es6 promise的使用,同时处理多个异步请求
    es6 filter的使用
    ES6中reduce的计算过程
    es6函数的参数展开
    搭建基于express框架的运行环境
    通过node.js搭建服务,访问html静态页面
    docker compose
    JDBCUtil
  • 原文地址:https://www.cnblogs.com/lindexi/p/12086249.html
Copyright © 2011-2022 走看看