1. Concept des énumérations :

C# Enum : un type enum est un type de données de base (type valeur) utilisé pour déclarer un ensemble de constantes nommées.

2. Définition des énumérations :

Déclaration d’une variable enum :

enum <enum_name> {enumeration list};

Ici, enum_name spécifie le nom de type de l’enum, et la liste d’énumération est une liste d’identifiants séparés par des virgules.

Chaque symbole de la liste d'énumération représente une valeur entière, supérieure d'une unité à celle du symbole qui le précède. Par défaut, le premier symbole d'énumération a une valeur de 0. Par exemple :

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

3. Cas d'énumération et utilisation des variables d'énumération :

Exemple

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. Classe Enum :

Tous les types d'énumération héritent implicitement du type System.Enum. System.Enum est le seul type référence dérivé de System.ValueType qui n'est pas un type valeur.

5. Classe Enum :

MéthodeDescription
CompareToCompare cette instance à un objet spécifié et retourne une indication de leurs valeurs relatives.
Equals : indique si cette instance est égale à un objet spécifié.
FormatConvertit la valeur spécifiée du type enum spécifié en sa représentation sous forme de chaîne équivalente selon le format spécifié.
GetNameRécupère le nom de la constante qui a la valeur spécifiée dans l'énumération spécifiée.
GetNamesRécupère un tableau des noms des constantes dans l'énumération spécifiée.
GetTypeCodeRetourne le TypeCode sous-jacent de cette instance.
GetUnderlyingTyeRetourne le type sous-jacent de l'énumération spécifiée.
GetValuesUn tableau des valeurs des constantes de l'énumération spécifiée.
HasFlagDétermine si un ou plusieurs champs de bits sont définis dans l'instance actuelle.
IsDefinedRetourne une indication précisant si une constante avec la valeur spécifiée existe dans l'énumération spécifiée.
ParseConvertit la représentation sous forme de chaîne du nom ou de la valeur numérique d'une ou plusieurs constantes d'énumération en un objet d'énumération équivalent ; un paramètre spécifie si l'opération est insensible à la casse.
TryParseConvertit la représentation sous forme de chaîne du nom ou de la valeur numérique d'une ou plusieurs constantes d'énumération en un objet d'énumération équivalent ; une valeur de retour indique si la conversion a réussi.

6. Énumération de drapeaux / Énumération de bits

C# Énumération de drapeaux (Flags) : Un type d'énumération est un type de données de base (type valeur) utilisé pour déclarer un ensemble de constantes nommées.

Les valeurs d'énumération sont mutuellement exclusives. Un ensemble de drapeaux binaires, en revanche, est une liste formée d'éléments qui apparaissent dans des combinaisons, généralement conçue pour combiner de nouvelles valeurs à l'aide d'une opération "OU bit à bit".

  

Un type énuméré exprime généralement un ensemble de valeurs numériques sémantiquement relativement indépendant. Utiliser un type énuméré pour implémenter un ensemble de drapeaux binaires est la combinaison la plus parfaite, abrégée en énumération de bits.

7. Définition de l'énumération 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. Exemple d'énumération 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.......。

Adresse d'origine : https://www.cnblogs.com/chenyao-1424433719/p/11213658.html