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, 2ua 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.value1ne 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.EnumSystem.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.

Viz také