Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
...
Anmärkningar
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, , uint16int32, 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 vid mönstermatchning av uppräkningsvärden, eftersom du måste ange ett mönster som fångar upp de odefinierade 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 följande enum.
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 fall för uppräkningar alltid som public. Detta gör att de överensstämmer med C# och resten av .NET-plattformen.
Om du bara vill aktivera fullständig matchning för de definierade uppräkningsfallen kan du utelämna varning FS0104 med hjälp av direktivet #nowarn "104". Detta gör det möjligt för kompilatorn att endast behandla deklarerade uppräkningsvärden som giltiga under mönstermatchning, vilket undviker behovet av ett catch-all-fall – användbart när du är säker på att alla värden omfattas.
Varningen FS0104 (Enums may take values outside known cases.) finns eftersom uppräkningar kan tilldelas valfria underliggande värden, till exempel direkt eller som ett resultat av bitvisa operationer.