Перечисления
Перечисления, также известные как перечисления, являются целочисленными типами, в которых метки назначаются подмножество значений. Их можно использовать вместо литералов, чтобы сделать код более понятным и простым в обслуживании.
Синтаксис
type enum-name =
| value1 = integer-literal1
| value2 = integer-literal2
...
Замечания
Перечисление выглядит так же, как различающееся объединение с простыми значениями, за исключением того, что значения можно указать. Значения обычно являются целыми числами, начинающимися с 0 или 1, или целыми числами, представляющими битовые позиции. Если перечисление предназначено для представления битовых позиций, следует также использовать атрибут Flags .
Базовый тип перечисления определяется из используемого литерала, чтобы, например, можно использовать литералы с суффиксом, например 1u
2u
, и т. д., для типа без знака (uint32
).
При ссылке на именованные значения необходимо использовать имя самого типа перечисления в качестве квалификатора, т enum-name.value1
. е. не только value1
. Это поведение отличается от дискриминации профсоюзов. Это связано с тем, что перечисления всегда имеют атрибут RequireQualifiedAccess .
В следующем коде показано объявление и использование перечисления.
// Declaration of an enumeration.
type Color =
| Red = 0
| Green = 1
| Blue = 2
// Use of an enumeration.
let col1: Color = Color.Red
Перечисления можно легко преобразовать в базовый тип с помощью соответствующего оператора, как показано в следующем коде.
// Conversion to an integral type.
let n = int col1
Перечисленные типы могут иметь один из следующих базовых типов: sbyte
, byte
, int16
, uint16
, int32
, uint32
int64
uint64
char
и . Типы перечисления представлены в платформа .NET Framework как типы, унаследованные от System.Enum
, от которого, в свою очередь, наследуется от System.ValueType
. Таким образом, они представляют собой типы значений, расположенные на стеке или встроенном объекте, и любое значение базового типа является допустимым значением перечисления. Это важно при сопоставлении шаблонов со значениями перечисления, так как необходимо предоставить шаблон, который перехватывает неименованные значения.
Функцию enum
в библиотеке F# можно использовать для создания значения перечисления, даже значения, отличного от одного из предопределенных именованных значений. Вы используете функцию enum
следующим образом.
let col2 = enum<Color> (3)
Функция по умолчанию enum
работает с типом int32
. Поэтому его нельзя использовать с типами перечисления, имеющими другие базовые типы. Вместо этого используйте следующую команду.
type uColor =
| Red = 0u
| Green = 1u
| Blue = 2u
let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)
Кроме того, случаи перечисления всегда создаются как public
. Это так, чтобы они соответствовали C# и остальной части платформы .NET.