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
, 2u
i 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.value1
czyli , 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
, , int16
byte
, int32
uint64
uint32
uint16
int64
i .char
Typy wyliczenia są reprezentowane w programie .NET Framework jako typy dziedziczone z System.Enum
programu , które z kolei są dziedziczone z System.ValueType
programu . 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.