Výčty

Výčty, označované také jako výčty, představují celočíselné typy, kde jsou popisky přiřazeny podmnožině hodnot. Můžete je použít místo literálů, aby bylo možné čitelnější a udržovatelnější kód.

Syntax

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

Poznámky

Výčet vypadá podobně jako rozlišené sjednocení, které má jednoduché hodnoty, s výjimkou toho, že je možné zadat hodnoty. Hodnoty jsou obvykle celá čísla, která začínají na 0 nebo 1 nebo celá čísla, která představují bitové pozice. Pokud je výčet určen pro reprezentace bitových pozic, měli byste také použít atribut Flags .

Podkladový typ výčtu je určen z literálu, který je použit, takže lze například použít literály s příponou, například 1u , 2u a tak dále, pro typ unsigned integer ( uint32 ).

Když odkazujete na pojmenované hodnoty, je nutné použít název vlastního typu výčtu jako kvalifikátor, to znamená, enum-name.value1 ne pouze value1 . Toto chování se liší od v případě rozlišených sjednocení. Je to proto, že výčty mají vždy atribut RequireQualifiedAccess .

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 lze snadno převést na podkladový 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 základních typů: sbyte , byte , int16 , uint16 , int32 , uint32 ,, a int64 uint64 char . výčtové typy jsou reprezentovány v .NET Framework jako typy, které jsou zděděny z System.Enum , který je zase zděděn z System.ValueType . Proto jsou typy hodnot, které jsou umístěny v zásobníku nebo vloženy do obsahujícího objektu, a libovolná hodnota základního typu je platná hodnota výčtu. To je důležité v případě porovnávání vzorů s hodnotami výčtu, protože je nutné zadat vzor, který zachytává nepojmenované hodnoty.

enumFunkce v knihovně F # může být použita k vygenerování hodnoty výčtu, dokonce i jiné hodnoty než jedné z předdefinovaných pojmenovaných hodnot. Funkci použijete následujícím enum způsobem.

let col2 = enum<Color>(3)

Výchozí enum funkce funguje s typem int32 . Proto jej nelze použít s výčtovým typem, které mají jiné základní typy. Místo toho použijte následující příkaz.

type uColor =
   | Red = 0u
   | Green = 1u
   | Blue = 2u
let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)

Kromě toho jsou případy vydaných výčty vždy generovány jako public . To je tak, že se zarovnají s jazykem C# a zbytkem platformy .NET.

Viz také