Бөлісу құралы:


Перечисления

Перечисления, также известные как перечисления, являются целочисленными типами, в которых метки назначаются подмножество значений. Их можно использовать вместо литералов, чтобы сделать код более понятным и простым в обслуживании.

Синтаксис

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

Замечания

Перечисление выглядит так же, как различающееся объединение с простыми значениями, за исключением того, что значения можно указать. Значения обычно являются целыми числами, начинающимися с 0 или 1, или целыми числами, представляющими битовые позиции. Если перечисление предназначено для представления битовых позиций, следует также использовать атрибут Flags .

Базовый тип перечисления определяется из используемого литерала, чтобы, например, можно использовать литералы с суффиксом, например 1u2u, и т. д., для типа без знака (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, uint32int64uint64charи . Типы перечисления представлены в платформа .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.

См. также