Výčty
Výčty, označované také jako výčty, jsou integrální typy, ve kterých jsou popisky přiřazeny podmnožině hodnot. Místo literálů je můžete použít, aby byl kód čitelnější a udržovatelný.
Syntaxe
type enum-name =
| value1 = integer-literal1
| value2 = integer-literal2
...
Poznámky
Výčet vypadá podobně jako diskriminovaná sjednocení s jednoduchými hodnotami s tím rozdílem, že je možné zadat hodnoty. Hodnoty jsou obvykle celá čísla začínající číslem 0 nebo 1 nebo celá čísla, která představují bitové pozice. Pokud je výčet určen k reprezentaci bitových pozic, měli byste také použít atribut Flags .
Základní typ výčtu je určen z literálu, který se používá, takže například můžete pro typ bez znaménka (uint32
) použít literály s příponou, například 1u
, 2u
a tak dále.
Pokud odkazujete na pojmenované hodnoty, musíte použít název samotného typu výčtu jako kvalifikátor, to znamená , enum-name.value1
ne jen value1
. Toto chování se liší od diskriminovaných sjednocení. Důvodem je, že výčty mají vždy RequireQualifiedAccess atribut.
Následující kód ukazuje deklaraci a použití výčtu.
// Declaration of an enumeration.
type Color =
| Red = 0
| Green = 1
| Blue = 2
// Use of an enumeration.
let col1: Color = Color.Red
Výčty můžete snadno převést na základní typ pomocí příslušného operátoru, jak je znázorněno v následujícím kódu.
// Conversion to an integral type.
let n = int col1
Výčtové typy mohou mít jeden z následujících podkladových typů: sbyte
, byte
, int16
, uint16
, int32
, uint32
, int64
, uint64
, a char
. Výčtové typy jsou reprezentovány v rozhraní .NET Framework jako typy, které jsou zděděné z System.Enum
System.ValueType
. Jedná se tedy o typy hodnot, které se nacházejí v zásobníku nebo vložené do objektu obsahujícího objektu, a každá hodnota základního typu je platná hodnota výčtu. To je důležité při porovnávání vzorů s hodnotami výčtu, protože musíte zadat vzor, který zachytí nepojmenované hodnoty.
Funkci enum
v knihovně jazyka F# lze použít k vygenerování hodnoty výčtu, a to i k jiné hodnotě než jedné z předdefinovaných pojmenovaných hodnot. Funkci použijete enum
následujícím způsobem.
let col2 = enum<Color> (3)
Výchozí enum
funkce funguje s typem int32
. Proto jej nelze použít s typy výčtu, které mají jiné základní typy. Místo toho použijte následující:
type uColor =
| Red = 0u
| Green = 1u
| Blue = 2u
let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)
Kromě toho jsou případy výčtů vždy generovány jako public
. To znamená, že jsou v souladu s jazykem C# a zbytkem platformy .NET.