Opsommingen

Opsommingen, ook wel opsommingen genoemd, zijn integrale typen waarbij labels worden toegewezen aan een subset van de waarden. U kunt deze gebruiken in plaats van letterlijke gegevens om code beter leesbaar en onderhoudbaar te maken.

Syntaxis

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

Opmerkingen

Een opsomming lijkt veel op een gediscrimineerde samenvoeging met eenvoudige waarden, behalve dat de waarden kunnen worden opgegeven. De waarden zijn meestal gehele getallen die beginnen bij 0 of 1 of gehele getallen die bitposities vertegenwoordigen. Als een opsomming bedoeld is om bitposities weer te geven, moet u ook het kenmerk Flags gebruiken.

Het onderliggende type van de opsomming wordt bepaald op basis van de letterlijke waarde die wordt gebruikt, zodat u bijvoorbeeld letterlijke waarden kunt gebruiken met een achtervoegsel, zoals 1u, 2uenzovoort, voor een niet-ondertekend geheel getal (uint32) type.

Wanneer u naar de benoemde waarden verwijst, moet u de naam van het opsommingstype zelf gebruiken als kwalificatie, dat wil gezegd, enum-name.value1niet alleen value1. Dit gedrag verschilt van die van gediscrimineerde vakbonden. Dit komt doordat opsommingen altijd het kenmerk RequireQualifiedAccess hebben.

De volgende code toont de declaratie en het gebruik van een opsomming.

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

U kunt opsommingen eenvoudig converteren naar het onderliggende type met behulp van de juiste operator, zoals wordt weergegeven in de volgende code.

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

Opgesomde typen kunnen een van de volgende onderliggende typen hebben: sbyte, int16uint16byte, int32, , uint32, int64, , , en . uint64char Opsommingstypen worden weergegeven in .NET Framework als typen die worden overgenomen van System.Enum, die op hun beurt worden overgenomen van System.ValueType. Het zijn dus waardetypen die zich op de stapel of inline in het betreffende object bevinden, en elke waarde van het onderliggende type is een geldige waarde van de opsomming. Dit is belangrijk wanneer het patroon overeenkomt met opsommingswaarden, omdat u een patroon moet opgeven waarmee de niet-benoemde waarden worden onderschept.

De enum functie in de F#-bibliotheek kan worden gebruikt om een opsommingswaarde te genereren, zelfs een andere waarde dan een van de vooraf gedefinieerde benoemde waarden. U gebruikt de enum functie als volgt.

let col2 = enum<Color> (3)

De standaardfunctie enum werkt met het type int32. Daarom kan deze niet worden gebruikt met opsommingstypen die andere onderliggende typen hebben. Gebruik in plaats daarvan het volgende.

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

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

Bovendien worden aanvragen voor opsommingen altijd verzonden als public. Dit is zo dat ze zijn afgestemd op C# en de rest van het .NET-platform.

Zie ook