Énumérations (F#)
Les énumérations, également appelées enums, sont des types qui ont un ensemble défini de valeurs nommées. Vous pouvez les utiliser à la place de littéraux pour rendre le code plus lisible et plus facile à gérer.
type enum-name =
| value1 = integer-literal1
| value2 = integer-literal2
...
Notes
Une énumération ressemble fortement à une union discriminée avec des valeurs simples, à la différence que les valeurs peuvent être spécifiées. Les valeurs sont en général des entiers qui commencent à 0 ou 1, ou des entiers qui représentent des positions de bit. Le type sous-jacent de l'énumération est déterminé à partir du littéral utilisé. Cela vous permet, par exemple, d'utiliser des littéraux avec un suffixe, tel que 1u, 2u, et ainsi de suite pour un type d'entier non signé (uint32).
Lorsque vous faites référence aux valeurs nommées, vous devez utiliser le nom du type d'énumération en tant que qualificateur, c'est-à-dire enum-name.value1, et pas seulement value1. Ce comportement diffère de celui des unions discriminées. En effet, les énumérations ont toujours l'attribut RequireQualifiedAccess.
Le code suivant illustre la déclaration et l'utilisation d'une énumération.
// Declaration of an enumeration.
type Color =
| Red = 0
| Green = 1
| Blue = 2
// Use of an enumeration.
let col1 : Color = Color.Red
Vous pouvez convertir facilement des énumérations en type sous-jacent à l'aide de l'opérateur approprié, comme indiqué dans le code suivant.
// Conversion to an integral type.
let n = int col1
Les types énumérés peuvent avoir l'un des types sous-jacents suivants : sbyte, byte, int16, uint16, int32, uint32, int64, uint16, uint64 et char. Les types d'énumération sont représentés dans le .NET Framework comme des types hérités de Enum qui, ensuite, est hérité de ValueType. Donc, ils sont des types valeur situés sur la pile ou inline dans l'objet contenant, et toute valeur du type sous-jacent est une valeur valide de l'énumération. Cela est important lors de l'utilisation de critères spéciaux sur les valeurs d'énumération, parce que vous devez fournir un modèle qui intercepte les valeurs sans nom.
La fonction enum dans la bibliothèque F# peut être utilisée pour générer une valeur d'énumération, même une valeur autre que l'une des valeurs nommées prédéfinies. La fonction enum s'utilise comme suit.
let col2 = enum<Color>(3)
La fonction enum par défaut fonctionne avec le type int32. Par conséquent, elle ne peut pas être utilisée avec des types d'énumération qui ont d'autres types sous-jacents. Utilisez plutôt ce qui suit.
type uColor =
| Red = 0u
| Green = 1u
| Blue = 2u
let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)