1. Concepto de enumeración:

C# Enumeración (Enum): el tipo de enumeración es un tipo de datos básico (tipo de valor) utilizado para declarar un conjunto de constantes nombradas.

2. Definición de enumeración:

Declarar variables enum:

enum <enum_name> {enumeration list};

Donde enum_name especifica el nombre del tipo de enumeración, y enumeration list es una lista de identificadores separados por comas.

Cada símbolo de la lista de enumeración representa un valor entero, un valor entero mayor que el símbolo que le precede. De forma predeterminada, el valor del primer símbolo de enumeración es 0. Por ejemplo:

 
enum Days {Sun , Mon, tue, Fir, sat };

3. Ejemplo de enumeración, uso de variables de enumeración:

Ejemplo

using System;
namespace EnumApplication
{
    class EnumProgram
    {
          enum Days { Sun, Mon, tue, Wed, thu, Fri, sat };
         
          static void Main(string[] args)
          {
                int WeekdayStart = (int)Days.Mon;
                int WeekdayEnd = (int)Days.Fir;
                Console.WriteLine("Monday:{0}",WeekdayStart);  
                Console.WriteLine("Firday:{0}",WeekdayEnd );  
                Console.ReadKey();
          }    
    }
}

4. Clase Enum:

Todos los tipos de enumeración heredan implícitamente del tipo System.Enum. El tipo System.Enum es el único tipo de referencia que hereda de System.ValueType y que no es un tipo de valor.

5. Clase Enum:

MétodosDescripción
CompareToCompara esta instancia con el objeto especificado y devuelve una indicación de los valores relativos de ambos.
Equals: Indica si esta instancia es igual al objeto especificado.
FormatConvierte el valor especificado del tipo de enumeración especificado a su representación de cadena equivalente según el formato especificado.
GetNameRecupera el nombre de la constante que tiene el valor especificado en la enumeración especificada.
GetNamesRecupera una matriz de los nombres de las constantes en la enumeración especificada.
GetTypeCodeDevuelve el TypeCode subyacente de esta instancia.
GetUnderlyingTyeDevuelve el tipo subyacente de la enumeración especificada.
GetValuesMatriz de los valores de las constantes en la enumeración especificada.
HasFlagDetermina si uno o más campos de bits están establecidos en la instancia actual.
IsDefinedDevuelve una indicación de si existe una constante con el valor especificado en la enumeración especificada.
ParseConvierte la representación de cadena del nombre o valor numérico de una o más constantes de enumeración en un objeto de enumeración equivalente; un parámetro especifica si la operación distingue entre mayúsculas y minúsculas.
TryParseConvierte la representación de cadena del nombre o valor numérico de una o más constantes de enumeración en un objeto de enumeración equivalente; un valor de retorno indica si la conversión fue exitosa.

6. Enumeración de marcas / enumeración de bits

C# Enumeración de marcas (Flags): el tipo de enumeración es un tipo de datos básico (tipo de valor) utilizado para declarar un conjunto de constantes nombradas.

Los valores de enumeración son mutuamente excluyentes. Una colección de marcas de bits es una lista formada por elementos que aparecen en combinación, normalmente diseñada para combinar nuevos valores mediante la operación "O bit a bit" (OR).

  

Los tipos de enumeración suelen expresar un conjunto de valores semánticamente relativamente independientes. Implementar una colección de marcas de bits mediante un tipo de enumeración es la combinación más perfecta, abreviada como enumeración de bits.

7. Definición de la enumeración de bits

///<summary>
  /// 权限枚举
  ///</summary>
  [Flags]
  public enum permission                     注意加了[Flags]特性后有三种写法,
  {                                  一种是使用<<符号,
      Unknown = 0; // 也可以写成0x00或0             第二种是0x01,                
                                    还有一种是直接写0,1,2,4,8....,
      Create = 1<<0, // 0x01或1                 一般来说是2的n次方来表示。  
                                     注:<<左操作符,表示对这个数进行移位。
      Read = 1<<1,  //0x02或2

      Update = 1<<2, //0x04或4

      Delete = 1<<3  //0x08或8
  }

8. Ejemplo de enumeración de bits

//1、给用户创建、读取,修改和删除的权限
var parmission = Permission.Create | parmission.Read | parmission.Update | parmission.Delete;

//2、去掉用户的修改和删除权限
parmission = parmission &~parmission.Update;
parmission = parmission &~parmission.Delete;

//3、给用户加上修改的权限
parmission = parmission | parmission.Update;

//4、判断用户是否有创建的权限
var isCreate = (parmission & parmission.Create)!=0;
//或者
var isCreate = (parmission & parmission.Create)==parmission.Create;
  这时parmission枚举的值将变成0+1+4=5,它的ToSting()将变成“parmission.Create,
  parmission.Read”,parmission.Update; 这里我们可以解释为什么第五个值Delete是8而不能成为5.
  也就是说它的值不应该是前几项值的复合值。一个比较简单的方法
  就是用2的n次方来依次位每一项赋值,例如:1,2,4,8,16,32,64.......。

Dirección original: https://www.cnblogs.com/chenyao-1424433719/p/11213658.html