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
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:
| Methode | Beschreibung |
|---|---|
| CompareTo | Vergleicht 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. | |
| Format | Konvertiert den angegebenen Wert des angegebenen Enum-Typs gemäß dem Angegebenen in seine äquivalente Zeichenfolgendarstellung. |
| GetName | Ruft den Namen der Konstante ab, die den angegebenen Wert im angegebenen Enum hat. |
| GetNames | Ruft ein Array der Namen der Konstanten im angegebenen Enum ab. |
| GetTypeCode | Gibt den zugrunde liegenden TypeCode dieser Instanz zurück. |
| GetUnderlyingTye | Gibt den zugrunde liegenden Typ des angegebenen Enums zurück. |
| GetValues | Ein Array der Werte der Konstanten in der angegebenen Enum. |
| HasFlag | Bestimmt, ob ein oder mehrere Bitfelder in der aktuellen Instanz festgelegt sind. |
| IsDefined | Gibt an, ob eine Konstante mit dem angegebenen Wert in der angegebenen Enum vorhanden ist. |
| Parse | Konvertiert 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. |
| TryParse | Konvertiert 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