Sdílet prostřednictvím


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ýčtový typ vypadá podobně jako rozlišované sjednocení, které má jednoduché hodnoty, s tím rozdílem, že v něm lze explicitně 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 (1u) použít literály s příponou, například 2u, uint32a 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.Enum, který je zase zděděný z System.ValueType. Jedná se tedy o typy hodnot, které se nacházejí v zásobníku nebo jsou vložené do objektu, který je obsahující objekt, a každá hodnota základního typu je platnou hodnotou 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 výstupovány jako public. To znamená, že jsou v souladu s jazykem C# a zbytkem platformy .NET.

Chcete-li povolit důkladné porovnávání pouze pro případy výčtu, které byly definovány, můžete potlačit upozornění FS0104 pomocí direktivy #nowarn "104". Kompilátor tak může zpracovávat pouze deklarované hodnoty výčtu jako platné během porovnávání vzorů, abyste se vyhnuli nutnosti zachytávání všech případů – to je užitečné, pokud jste si jistí, že jsou pokryty všechny hodnoty.

Upozornění FS0104 (Enums may take values outside known cases.) existuje, protože výčty lze přiřadit libovolné podkladové hodnoty, například přímo nebo jako výsledek bitové operace.

Viz také