1. Konzept von Enums:

C#-Enum: Ein Enum-Typ ist ein Basisdatentyp (Werttyp), der zum Deklarieren einer Menge benannter Konstanten verwendet wird.

2. Definition von Enums:

Deklarieren einer Enum-Variable:

enum <enum_name> {enumeration list};

Hier gibt enum_name den Typnamen des Enums an, und die Enumerationsliste ist eine durch Kommas getrennte Liste von Bezeichnern.

Jedes Symbol in der Enum-Liste repräsentiert einen ganzzahligen Wert, der um eins größer ist als das vorhergehende Symbol. Standardmäßig hat das erste Enum-Symbol den Wert 0. Zum Beispiel:

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

3. Enum-Fälle und Verwendung von Enum-Variablen:

Beispiel

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

Alle Enum-Typen erben implizit vom Typ System.Enum. System.Enum ist der einzige von System.ValueType abgeleitete Referenztyp, der kein Werttyp ist.

5. Enum-Klasse:

MethodeBeschreibung
CompareToVergleicht diese Instanz mit einem angegebenen Objekt und gibt einen Hinweis auf ihre relativen Werte zurück.
Equals: Gibt an, ob diese Instanz gleich einem angegebenen Objekt ist.
FormatKonvertiert den angegebenen Wert des angegebenen Enum-Typs gemäß dem Angegebenen in seine äquivalente Zeichenfolgendarstellung.
GetNameRuft den Namen der Konstante ab, die den angegebenen Wert im angegebenen Enum hat.
GetNamesRuft ein Array der Namen der Konstanten im angegebenen Enum ab.
GetTypeCodeGibt den zugrunde liegenden TypeCode dieser Instanz zurück.
GetUnderlyingTyeGibt den zugrunde liegenden Typ des angegebenen Enums zurück.
GetValuesEin Array der Werte der Konstanten in der angegebenen Enum.
HasFlagBestimmt, ob ein oder mehrere Bitfelder in der aktuellen Instanz festgelegt sind.
IsDefinedGibt an, ob eine Konstante mit dem angegebenen Wert in der angegebenen Enum vorhanden ist.
ParseKonvertiert die Zeichenfolgendarstellung des Namens oder numerischen Werts einer oder mehrerer Enum-Konstanten in ein entsprechendes Enum-Objekt; ein Parameter gibt an, ob bei dem Vorgang die Groß-/Kleinschreibung nicht berücksichtigt wird.
TryParseKonvertiert die Zeichenfolgendarstellung des Namens oder numerischen Werts einer oder mehrerer Enum-Konstanten in ein entsprechendes Enum-Objekt; ein Rückgabewert gibt an, ob die Konvertierung erfolgreich war.

6. Flag-Enum / Bit-Enum

C# Flag-Enum (Flags): Ein Enum-Typ ist ein grundlegender Datentyp (Werttyp), mit dem eine Reihe benannter Konstanten deklariert wird.

Enum-Werte schließen sich gegenseitig aus. Ein Bit-Flag-Satz hingegen ist eine Liste, die aus Elementen gebildet wird, die in Kombinationen auftreten und normalerweise dazu dienen, neue Werte mithilfe einer "bitweisen OR"-Operation zu kombinieren.

  

Ein Enum-Typ drückt normalerweise eine semantisch relativ unabhängige Menge numerischer Werte aus. Einen Enum-Typ zur Implementierung eines Bit-Flag-Satzes zu verwenden, ist die perfekteste Kombination, abgekürzt als Bit-Enum.

7. Definition des Bit-Enum

///<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. Beispiel für Bit-Enum

//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.......。

Originaladresse: https://www.cnblogs.com/chenyao-1424433719/p/11213658.html