Enumerationen (F#)

Enumerationen sind Typen, die über einen definierten Satz benannter Werte verfügen. Sie können sie anstelle von Literalen verwenden, um die Verwaltung von Code zu erleichtern und die Lesbarkeit von Code zu erhöhen.

type enum-name =
   | value1 = integer-literal1
   | value2 = integer-literal2
   ...

Hinweise

Eine Enumeration hat große Ähnlichkeit mit einer Unterscheidungs-Union, die über einfache Werte verfügt, jedoch können die Werte angegeben werden. Die Werte sind in der Regel ganze Zahlen, die mit 0 oder 1 beginnen, oder ganze Zahlen, die Bitpositionen darstellen. Der zugrunde liegende Typ der Enumeration wird durch das verwendete Literal bestimmt, sodass Sie beispielsweise für einen ganzzahligen Typ ohne Vorzeichen (uint32) Literale mit einem Suffix, z. B. 1u, 2u usw., verwenden können.

Wenn Sie auf die benannten Werte verweisen, müssen Sie den Namen des Enumerationstyps selbst als Qualifizierer verwenden, also enum-name.value1 und nicht einfach value1. Dies unterscheidet sich vom Verhalten von Unterscheidungs-Unions. Das liegt daran, dass Enumerationen immer über das RequireQualifiedAccess-Attribut verfügen.

Im folgenden Code werden die Deklaration und Verwendung einer Enumeration veranschaulicht.

// Declaration of an enumeration.
type Color =
   | Red = 0
   | Green = 1
   | Blue = 2
// Use of an enumeration.
let col1 : Color = Color.Red

Sie können Enumerationen mit dem entsprechenden Operator problemlos in den zugrunde liegenden Typ konvertieren, wie im folgenden Code gezeigt.

// Conversion to an integral type.
let n = int col1

Enumerationstypen können über einen der folgenden zugrunde liegenden Typen verfügen: sbyte, byte, int16, uint16, int32, uint32, int64, uint16, uint64 und char. Enumerationstypen werden in .NET Framework als Typen dargestellt, die von Enum erben, und dieser Typ erbt von ValueType. Daher sind sie Werttypen im Stapel oder inline im enthaltenden Objekt, und ein beliebiger Wert des zugrunde liegenden Typs ist ein gültiger Wert der Enumeration. Dies ist wichtig beim Mustervergleich für Enumerationswerte, da Sie ein Muster bereitstellen müssen, das die unbenannten Werte abfängt.

Mit der enum-Funktion in der F#-Bibliothek kann ein Enumerationswert generiert werden, sogar ein anderer Wert als einer der vordefinierten, benannten Werte. Die enum-Funktion wird wie folgt verwendet.

let col2 = enum<Color>(3)

Die enum-Standardfunktion wird mit dem Typ int32 verwendet. Daher kann sie nicht mit Enumerationstypen verwendet werden, die über andere zugrunde liegende Typen verfügen. Verwenden Sie stattdessen Folgendes:

type uColor =
   | Red = 0u
   | Green = 1u
   | Blue = 2u
let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)

Siehe auch

Konzepte

Umwandlung und Konvertierungen (F#)

Weitere Ressourcen

F#-Sprachreferenz