Énumérations

Les énumérations, également appelées enums, sont des types intégraux où des étiquettes sont affectées à un sous-ensemble des valeurs. Vous pouvez les utiliser à la place de littéraux pour rendre le code plus lisible et plus facile à gérer.

Syntaxe

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

Notes

Une énumération ressemble beaucoup à une union discriminée ayant des valeurs simples, sauf que les valeurs peuvent être spécifiées. Les valeurs sont généralement des entiers commençant à 0 ou 1, ou des entiers qui représentent des positions de bits. Si une énumération est destinée à représenter des positions de bits, vous devez également utiliser l’attribut Flags.

Le type sous-jacent de l’énumération est déterminé à partir du littéral utilisé. Ainsi, vous pouvez utiliser des littéraux avec un suffixe, par exemple 1u, 2u, etc., pour un type entier non signé (uint32).

Quand vous faites référence aux valeurs nommées, vous devez utiliser le nom du type d’énumération lui-même 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 montre 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 facilement convertir les énumérations en type sous-jacent à l’aide de l’opérateur approprié, comme le montre 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, uint64 et char. Les types d’énumération sont représentés dans le .NET Framework en tant que types hérités de System.Enum, qui à son tour est hérité de System.ValueType. Ainsi, il s’agit de types valeur situés dans la pile ou inline dans l’objet conteneur, et toute valeur du type sous-jacent est une valeur valide de l’énumération. Cela est important quand vous utilisez des critères spéciaux sur des valeurs d’énumération, car 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, notamment une autre valeur que l’une des valeurs nommées prédéfinies. Vous devez utiliser la fonction enum de la façon suivante.

let col2 = enum<Color> (3)

La fonction enum par défaut fonctionne avec le type int32. Elle ne peut donc pas être utilisée avec les types énumération qui ont d’autres types sous-jacents. À la place, utilisez ce qui suit.

type uColor =
    | Red = 0u
    | Green = 1u
    | Blue = 2u

let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)

De plus, les valeurs nommées dans les enums sont toujours émises comme étant public. Cela permet de les aligner sur le C# et le reste de la plateforme .NET.

Voir aussi