Wyliczenia

Wyliczenia, znane również jako wyliczenia, to typy całkowite, w których etykiety są przypisywane do podzestawu wartości. Można ich używać zamiast literałów, aby kod był bardziej czytelny i konserwowalny.

Składnia

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

Uwagi

Wyliczenie wygląda podobnie jak dyskryminowana unia, która ma proste wartości, z tą różnicą, że można określić wartości. Wartości są zazwyczaj liczbami całkowitymi, które zaczynają się od 0 lub 1, czyli liczb całkowitych reprezentujących pozycje bitów. Jeśli wyliczenie ma reprezentować pozycje bitowe, należy również użyć atrybutu Flags .

Podstawowy typ wyliczenia jest określany na podstawie używanego literału, aby na przykład można było użyć literałów z sufiksem, takim jak 1u, 2ui tak dalej, dla typu niepodpisanej liczby całkowitej (uint32).

W przypadku odwoływania się do nazwanych wartości należy użyć nazwy typu wyliczenia jako kwalifikatora, enum-name.value1czyli , a nie tylko value1. Takie zachowanie różni się od dyskryminowanych związków zawodowych. Dzieje się tak, ponieważ wyliczenia zawsze mają atrybut RequireQualifiedAccess .

Poniższy kod przedstawia deklarację i użycie wyliczenia.

// Declaration of an enumeration.
type Color =
    | Red = 0
    | Green = 1
    | Blue = 2
// Use of an enumeration.
let col1: Color = Color.Red

Wyliczenia można łatwo przekonwertować na typ bazowy przy użyciu odpowiedniego operatora, jak pokazano w poniższym kodzie.

// Conversion to an integral type.
let n = int col1

Wyliczone typy mogą mieć jeden z następujących typów bazowych: sbyte, , int16byte, int32uint64uint32uint16int64i .char Typy wyliczenia są reprezentowane w programie .NET Framework jako typy dziedziczone z System.Enumprogramu , które z kolei są dziedziczone z System.ValueTypeprogramu . W związku z tym są to typy wartości, które znajdują się na stosie lub wbudowanym obiekcie zawierającym, a dowolna wartość typu bazowego jest prawidłową wartością wyliczenia. Jest to istotne w przypadku dopasowywania wzorca dla wartości wyliczenia, ponieważ należy podać wzorzec, który przechwytuje nienazwane wartości.

Funkcja enum w bibliotece języka F# może służyć do generowania wartości wyliczenia, nawet wartości innej niż jedna ze wstępnie zdefiniowanych nazwanych wartości. Funkcja jest używana enum w następujący sposób.

let col2 = enum<Color> (3)

Funkcja domyślna enum działa z typem int32. W związku z tym nie można jej używać z typami wyliczenia, które mają inne typy bazowe. Zamiast tego użyj następującego polecenia.

type uColor =
    | Red = 0u
    | Green = 1u
    | Blue = 2u

let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)

Ponadto przypadki wyliczenia są zawsze emitowane jako public. Dzięki temu są one zgodne z językiem C# i resztą platformy .NET.

Zobacz też