Usar enumeraciones para representar constantes con nombre en C#
Imagine que trabaja en un proyecto para realizar un seguimiento de los estados de pedido y necesita organizar valores como "Pendiente", "Enviado" o "Entregado" de una manera clara y manejable. El uso de enumeraciones en C# le permite crear una lista de estos estados de pedido. El uso de enumeraciones facilita el uso de estos estados en el proyecto sin volver a crearlos ni buscarlos repetidamente.
Describir un escenario para enumeraciones y el valor de enumeraciones
Las enumeraciones son ideales para representar un conjunto de valores predefinidos que se excluyen mutuamente o se pueden combinar. Por ejemplo, puede usar una enumeración para definir las estaciones del año:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
El ejemplo de código muestra cómo definir una enumeración para representar valores mutuamente excluyentes.
Las enumeraciones mejoran la legibilidad del código reemplazando literales numéricos por nombres significativos. También ayudan a evitar que se asignen valores no válidos, ya que solo se permiten las constantes definidas.
Nota:
Las enumeraciones también pueden representar combinaciones de opciones mediante marcas de bits, que son útiles para escenarios como permisos de archivo o opciones de configuración.
Definición de enumeraciones
Para definir una enumeración en C#, use la enum palabra clave seguida del nombre de la enumeración y sus miembros. Este es un ejemplo de una enumeración simple para los días de la semana:
enum DaysOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
El ejemplo de código muestra cómo definir una enumeración para los días de la semana.
De forma predeterminada, el tipo subyacente de una enumeración es inty los valores comienzan en 0, incrementándose en 1 para cada miembro.
Nota:
Las enumeraciones se limitan a tipos enteros (por ejemplo, int, byte, short) y no pueden representar valores no enteros como cadenas o decimales.
Establecimiento de tipos y valores subyacentes para enumeraciones
Puede especificar un tipo entero subyacente diferente para una enumeración y asignar valores personalizados a sus miembros. Por ejemplo:
enum ErrorCode : ushort
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
El ejemplo de código muestra cómo establecer un tipo y valores subyacentes personalizados para una enumeración.
Esta flexibilidad le permite alinear los valores de enumeración con sistemas externos o requisitos específicos.
Sugerencia
Evite usar tipos char no enteros como el tipo subyacente para enumeraciones, lo que puede provocar un comportamiento poco confiable.
Realizar conversiones con enumeraciones
Las enumeraciones admiten conversiones explícitas entre sus miembros y el tipo entero subyacente. Por ejemplo:
DaysOfWeek day = (DaysOfWeek)3;
Console.WriteLine(day); // Outputs: Wednesday
El ejemplo de código muestra cómo realizar una conversión explícita de un valor entero a una enumeración.
Puede validar los valores de enumeración mediante el System.Enum.IsDefined método :
bool isValid = Enum.IsDefined(typeof(DaysOfWeek), 3);
Console.WriteLine(isValid); // Outputs: True
El ejemplo de código muestra cómo validar un valor de enumeración mediante System.Enum.IsDefined.
Sugerencia
Si el valor no es válido, puede controlarlo asignando un valor predeterminado o iniciando una excepción para garantizar el uso seguro.
Aplicar procedimientos recomendados para diseñar enumeraciones
Para diseñar enumeraciones de forma eficaz:
- Use nombres singulares para enumeraciones simples y nombres plurales para enumeraciones de marca.
- Proporcione un valor de cero para enumeraciones simples, normalmente denominadas
None. - Evite usar valores especiales o reservados, ya que pueden confundir a los usuarios.
- Use las potencias de dos para enumeraciones de marca para habilitar operaciones bit a bit.
Sugerencia
Considere la posibilidad de agregar métodos de extensión a enumeraciones para obtener más funcionalidad, como la validación o el formato.
Implementación de enumeraciones con valores y métodos personalizados
Aunque las enumeraciones no pueden contener métodos directamente, puede agregar funcionalidad mediante métodos de extensión. Por ejemplo:
public static class DaysOfWeekExtensions
{
public static bool IsWeekend(this DaysOfWeek day)
{
return day == DaysOfWeek.Saturday || day == DaysOfWeek.Sunday;
}
}
DaysOfWeek today = DaysOfWeek.Saturday;
Console.WriteLine(today.IsWeekend()); // Outputs: True
El ejemplo de código muestra cómo usar un método de extensión para agregar funcionalidad a una enumeración.
Sugerencia
Use métodos de extensión para mejorar las enumeraciones sin modificar su definición, por lo que son más versátiles y reutilizables.
Ejemplo práctico: Uso de enumeraciones para administrar estados de pedido
Las enumeraciones se suelen usar en aplicaciones para representar valores predefinidos. Por ejemplo, en una aplicación de comercio electrónico, puede usar una enumeración para administrar los estados de los pedidos:
enum OrderStatus
{
Pending,
Shipped,
Delivered,
Cancelled
}
class Order
{
public int OrderId { get; set; }
public OrderStatus Status { get; set; }
public void UpdateStatus(OrderStatus newStatus)
{
Status = newStatus;
Console.WriteLine($"Order {OrderId} status updated to {Status}");
}
}
var order = new Order { OrderId = 123, Status = OrderStatus.Pending };
order.UpdateStatus(OrderStatus.Shipped);
En este ejemplo se muestra cómo definir una enumeración para los estados de pedido, usarla en una clase y actualizar el estado de un pedido. Ayuda a los principiantes a ver cómo se pueden aplicar las enumeraciones en un escenario real.
Mediante el uso de enumeraciones, puede reemplazar literales numéricos por nombres significativos, lo que hace que el código sea más intuitivo y fácil de mantener, al tiempo que permite conversiones y validaciones explícitas para garantizar el uso seguro de estas constantes en los proyectos.