Dela via


Uppräkningar

Uppräkningar, även kallade uppräkningar, är integraltyper där etiketter tilldelas till en delmängd av värdena. Du kan använda dem i stället för literaler för att göra koden mer läsbar och underhållsbar.

Syntax

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

Kommentarer

En uppräkning ser ut ungefär som en diskriminerad union som har enkla värden, förutom att värdena kan anges. Värdena är vanligtvis heltal som börjar vid 0 eller 1, eller heltal som representerar bitpositioner. Om en uppräkning är avsedd att representera bitpositioner bör du också använda attributet Flaggor .

Den underliggande typen av uppräkning bestäms utifrån den literal som används, så att du till exempel kan använda literaler med ett suffix, till exempel 1u, 2uoch så vidare, för en osignerad heltalstyp (uint32).

När du refererar till de namngivna värdena måste du använda namnet på själva uppräkningstypen som en kvalificerare, dvs enum-name.value1. , inte bara value1. Det här beteendet skiljer sig från det för diskriminerade fackföreningar. Det beror på att uppräkningar alltid har attributet RequireQualifiedAccess .

Följande kod visar deklarationen och användningen av en uppräkning.

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

Du kan enkelt konvertera uppräkningar till den underliggande typen med hjälp av lämplig operator, som du ser i följande kod.

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

Uppräknade typer kan ha någon av följande underliggande typer: sbyte, , byteint16, , int32uint16, uint32, int64, , uint64och char. Uppräkningstyper representeras i .NET Framework som typer som ärvs från System.Enum, som i sin tur ärvs från System.ValueType. Därför är de värdetyper som finns i stacken eller infogade i det innehållande objektet, och alla värden av den underliggande typen är ett giltigt värde för uppräkningen. Detta är viktigt när mönstermatchning på uppräkningsvärden, eftersom du måste ange ett mönster som fångar de namnlösa värdena.

Funktionen enum i F#-biblioteket kan användas för att generera ett uppräkningsvärde, även ett annat värde än ett av de fördefinierade, namngivna värdena. Du använder funktionen enligt enum följande.

let col2 = enum<Color> (3)

enum Standardfunktionen fungerar med typen int32. Därför kan den inte användas med uppräkningstyper som har andra underliggande typer. Använd i stället följande.

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

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

Dessutom genereras alltid fall för uppräkningar som public. Detta gör att de överensstämmer med C# och resten av .NET-plattformen.

Se även