Enumeraciones

Las enumeraciones, también conocidas como enumeraciones, , son tipos enteros donde las etiquetas se asignan a un subconjunto de los valores. Se pueden usar en lugar de los literales para que el código sea más fácil de leer y mantener.

Sintaxis

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

Observaciones

Una enumeración es muy similar a una unión discriminada que tiene valores simples, salvo que se pueden especificar los valores. Los valores suelen ser enteros que comienzan en 0 o 1, o enteros que representan posiciones de bits. Si una enumeración está pensada para representar posiciones de bits, también debe usar el atributo Flags.

El tipo subyacente de la enumeración se determina a partir del literal que se usa, de modo que, por ejemplo, puede usar literales con un sufijo, como , , y así sucesivamente, para un tipo entero sin signo 1u 2u ( uint32 ).

Al hacer referencia a los valores con nombre, debe usar el nombre del propio tipo de enumeración como calificador, es decir, enum-name.value1 , no solo value1 . Este comportamiento difiere del de las uniones discriminadas. Esto se debe a que las enumeraciones siempre tienen el atributo RequireQualifiedAccess.

El código siguiente muestra la declaración y el uso de una enumeración .

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

Puede convertir fácilmente enumeraciones al tipo subyacente mediante el operador adecuado, como se muestra en el código siguiente.

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

Los tipos enumerados pueden tener uno de los siguientes tipos subyacentes: sbyte , , , , , , , byte y int16 uint16 int32 uint32 int64 uint64 char . Los tipos de enumeración se representan en .NET Framework como tipos que se heredan de , que a su vez System.Enum se hereda de System.ValueType . Por lo tanto, son tipos de valor que se encuentran en la pila o en línea en el objeto que lo contiene, y cualquier valor del tipo subyacente es un valor válido de la enumeración . Esto es significativo cuando la coincidencia de patrones en valores de enumeración, porque tiene que proporcionar un patrón que captura los valores sin nombre.

La función de la biblioteca de F# se puede usar para generar un valor de enumeración, incluso un valor distinto de uno de los valores con enum nombre predefinidos. Use la enum función como se muestra a continuación.

let col2 = enum<Color>(3)

La función enum predeterminada funciona con el tipo int32 . Por lo tanto, no se puede usar con tipos de enumeración que tengan otros tipos subyacentes. En su lugar, use lo siguiente.

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

Además, los casos de enumeraciones siempre se emiten como public . Esto es para que se alineen con C# y el resto de la plataforma .NET.

Vea también