C# Enum(Enumeración) con ejemplo

⚡ Resumen inteligente

En C#, las enumeraciones definen un conjunto con nombre de valores enteros constantes, como los días de la semana, lo que facilita la lectura y el mantenimiento del código. La palabra clave `enum` declara estas constantes fijas una sola vez para su reutilización en todo el programa.

  • 📐 Definición: La palabra clave `enum` agrupa constantes con nombre relacionadas bajo un mismo tipo, reemplazando los números mágicos dispersos con identificadores legibles.
  • Ejemplo de días: Una enumeración llamada Days almacena los días de la semana, y Days.Sun devuelve el miembro seleccionado por su nombre.
  • 🔢 Valores subyacentes: Los miembros de la enumeración se corresponden con valores enteros que comienzan en cero y aumentan de uno en uno, a menos que se asignen números personalizados.
  • 🔁 Conversions: Las conversiones explícitas transforman una enumeración en su valor entero, mientras que Enum.Parse y Enum.TryParse convierten el texto de nuevo en miembros.
  • 🚩 Banderas El atributo Flags permite que una enumeración combine varias opciones como campos de bits utilizando el operador OR bit a bit.
  • 🤖 Asistencia de IA: GitHub Copilot y ML.NET ayudan a generar definiciones de enumeraciones y a asignar enumeraciones a características de aprendizaje automático.

Enumeración en C#

Enumeración C#

Una enumeración se utiliza en cualquier lenguaje de programación para definir un conjunto constante de valores. Por ejemplo, los días de la semana se pueden definir como una enumeración y usarse en cualquier parte del programa. En C#, la enumeración se define con la ayuda de la palabra clave "enum".

Veamos un ejemplo de cómo podemos utilizar la palabra clave 'enum'.

En nuestro ejemplo, definiremos una enumeración llamada días, que se utilizará para almacenar los días de la semana. Para cada ejemplo, modificaremos solo la función principal en nuestro archivo Program.cs.

Enumeración C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program 
 {
  enum Days{Sun,Mon,tue,Wed,thu,Fri,Sat};
  
  static void Main(string[] args) 
  {
   Console.Write(Days.Sun);
   
   Console.ReadKey();
  }
 }
}

Code Explicación:-

  1. La 'enumeración' tipo de datos se especifica para declarar una enumeración. El nombre de la enumeración es Días. Todos los días de la semana se especifican como valores de la enumeración.
  2. Finalmente, la función console.write se utiliza para mostrar uno de los valores de la enumeración.

Si el código anterior se ingresa correctamente y el programa se ejecuta con éxito, se mostrará el siguiente resultado.

Salida:

Enumeración C#

En el resultado, puede ver que el valor 'Sol' de la enumeración se muestra en la consola.

¿Por qué usar enumeraciones en C#?

Las enumeraciones hacen que un programa sea más fácil de leer, más seguro y más sencillo de mantener. En lugar de dispersar números sin explicación, a veces llamados números mágicos, por todo el código, una enumeración asigna a cada valor un nombre descriptivo que indica su propósito.

  • Legibilidad: Un nombre como Days.Fri es mucho más claro que el número 5, por lo que cualquiera que lea el código entenderá el significado de inmediato.
  • Seguridad de tipos: Una variable declarada con un tipo enumerado solo puede contener uno de los miembros definidos, lo que evita que se introduzcan valores no válidos.ping en.
  • Mantenibilidad: Las constantes relacionadas residen en un único lugar, por lo que añadir o renombrar un valor actualiza todo el programa de forma coherente.
  • El enlace de datos: Los frameworks como WPF y ASP.NET pueden vincular una enumeración a una lista desplegable, lo que hace que las enumeraciones sean útiles para crear interfaces de usuario.

Dado que el compilador comprueba cada asignación con respecto a los miembros permitidos, las enumeraciones también ayudan a detectar errores tempranamente, antes de que se ejecute el programa.

Asignación de valores personalizados a una enumeración de C#

Por defecto, C# asigna el valor 0 al primer miembro de la enumeración y aumenta en uno cada miembro siguiente. En la enumeración Days anterior, Sun es igual a 0, Mon es igual a 1 y Sat es igual a 6. Puedes anular estos valores predeterminados asignando números explícitos.

  • Valores explícitos: Escribir la enumeración Level {Low = 1, Medium = 5, High = 10} asigna a cada miembro un número elegido en lugar de la secuencia predeterminada.
  • Asignación parcial: Si asigna un valor solo a algunos miembros, el compilador continúa numerando los miembros siguientes a partir del último valor asignado.
  • Tipo subyacente: Por defecto, una enumeración almacena sus miembros como enteros (int), pero se puede basar en bytes, short o long para ahorrar memoria o ampliar el rango.

Los valores personalizados resultan útiles cuando los números deben coincidir con un sistema externo, como códigos de bases de datos o constantes de protocolo, de modo que la enumeración refleje con exactitud los datos reales.

Cómo convertir enumeraciones de C# a enteros, cadenas y banderas

En C#, es frecuente necesitar convertir un valor de enumeración a otro formato, como almacenarlo como un número o leerlo desde un archivo de texto. Estas conversiones se realizan de varias maneras estándar.

  • Enumeración a entero: Una conversión explícita como (int)Days.Wed devuelve el entero subyacente, lo cual es útil para almacenamiento o aritmética.
  • entero a enumeración: Al realizar una conversión en la dirección opuesta, por ejemplo (Days)3, un número se convierte de nuevo en el miembro de enumeración correspondiente.
  • Cadena a enumeración: Enum.Parse y el método más seguro Enum.TryParse convierten un nombre como "Fri" en el miembro Days.Fri sin generar un error por texto no válido.
  • Enumeración a cadena: Llamar a ToString en cualquier miembro devuelve su nombre, por lo que Days.Sun.ToString() produce "Sun" para mostrarlo o registrarlo.
  • Listado de miembros: Las funciones Enum.GetValues ​​y Enum.GetNames devuelven todos los valores o nombres, lo que resulta útil al rellenar menús o validar la entrada de datos.

Cuando una enumeración deba representar una combinación de opciones en lugar de una sola, aplique el atributo Flags y asigne a cada miembro una potencia de dos, como 1, 2, 4 y 8. A continuación, puede combinar los miembros con el operador OR bit a bit y comprobar si se trata de una opción específica con el método HasFlag.

Estas técnicas de conversión permiten que una enumeración se mueva limpiamente entre nombres legibles, números almacenados y conjuntos de indicadores combinados, manteniendoping El resto del programa es seguro en cuanto a tipos y fácil de seguir.

Preguntas Frecuentes

Una variable de enumeración tiene como valor predeterminado 0, y este valor se asigna al miembro que sea igual a 0. Si ningún miembro es 0, la variable sigue teniendo 0, por lo que los desarrolladores suelen definir primero un miembro None o Unknown para evitar confusiones.

Una constante define un único valor con nombre, mientras que una enumeración agrupa un conjunto de constantes con nombre relacionadas bajo un mismo tipo. Las enumeraciones también aportan seguridad de tipos, ya que una variable solo puede contener uno de los miembros definidos en la enumeración.

Sí. Un enum puede declararse dentro de un espacio de nombres o anidado dentro de una clase o estructura, lo que limita su ámbito a ese tipo. Sin embargo, C# no permite declarar un enum dentro del cuerpo de un método.

Sí. Dos o más miembros pueden compartir el mismo número subyacente, lo que hace que los nombres posteriores sean alias del primero. Las comparaciones los tratan como iguales, y al convertir ese valor a una cadena se devuelve el nombre definido primero en la enumeración.

Un enum es un tipo de valor, por lo que almacena sus datos directamente en lugar de como una referencia en el montón. Hereda de System.Enum, pero se comporta como el tipo entero subyacente, lo que agiliza la copia y la comparación de valores enum.

Sí. En ML.NET, puedes asignar una enumeración a una característica o etiqueta categórica, generalmente convirtiéndola a su valor entero o mediante codificación one-hot. Las enumeraciones fuertemente tipadas mantienen las columnas de entrada de una canalización de aprendizaje automático claras y consistentes.

Sí. GitHub Copilot sugiere definiciones completas de enumeraciones, valores personalizados, atributos Flags y ayudantes de conversión como Enum.TryParse dentro de Visual Studio y VS Code. RevRevisa cada sugerencia, ya que Copilot puede seleccionar valores o nombres que no se ajusten a tu dominio.

Utilice el método Enum.IsDefined, que devuelve verdadero cuando un número o nombre coincide con un miembro definido. Al combinarlo con Enum.TryParse, podrá validar la entrada del usuario de forma segura antes de convertir el texto en un valor de enumeración.

Resumir este post con: