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.