Compartir a través de


Enumeraciones (F#)

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

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

Comentarios

Una enumeración se parece mucho a una unión discriminada con valores simples, con la salvedad de que los valores se pueden especificar.Los valores son normalmente enteros que comienzan en el 0 o el 1, o bien enteros que representan posiciones de bit.Si una enumeración está pensado para representar posiciones de bits, también debe utilizar el atributo de FlagsAttribute .

El tipo subyacente de la enumeración se determina a partir del literal que se utiliza, de tal forma que, por ejemplo, se pueden utilizar literales con sufijo, como 1u, 2u, etc., para un tipo de entero sin signo (uint32).

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

En el código siguiente se muestran 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

Resulta sencillo convertir enumeraciones en el 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 tipos subyacentes siguientes: sbyte, byte, int16, uint16, int32, uint32, int64, uint16, uint64 y char.Los tipos de enumeración se representan en .NET Framework como tipos heredados de Enum, que a su vez se hereda de ValueType.Por consiguiente, son tipos de valor que están ubicados en la pila o insertados en el objeto contenedor; además, cualquier valor del tipo subyacente es un valor válido de la enumeración.Esto es importante a la hora de realizar la coincidencia de modelos con valores de enumeración porque hay que proporcionar un modelo que detecte los valores sin nombre.

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

let col2 = enum<Color>(3)

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

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

Vea también

Conceptos

Conversiones (F#)

Otros recursos

Referencia del lenguaje F#