Enum, enumeraciones en C Sharp (C#)
Tags: csharp, enum, programming, dev
Published: 2021-02-10 20:01:17

Al desarrollar una aplicación nos encontramos con **datos que pueden tener valores específicos** es decir no van a cambiar con el tiempo, estos pueden ser el género, estado civil, los roles de usuario, opciones a ser ingresados en un menú, etc. Para estos casos existen los Enums.

En C Sharp (C#) los Enums, **"son un tipo de valor definido por un conjunto de constantes, con nombre del tipo numérico integral subyacente"**. es decir nosotros podemos asignar **valores fijos(constantes)** que serán utilizados en la aplicación y estos se representan en el sistema como un numero entero, 

Por ejemplo si yo quiero definir estados civiles tenemos valores específicos para esto, como: soltero, casado, divorciado, viudo ..
Estos datos no van a cambiar es decir son constantes,y podemos hacer uso del Enum para poder utilizarlas.

**Sintaxis**
enum NombreDeEnumeracion { valor1, valor2,..}
donde Enum es la palabra reservada, seguida del nombre del conjunto de valores, y dentro de las llaves colocamos los valores fijos o constantes, como se muestra a continuación.
```csharp
enum EstadoCivil
    {
        Soltero,
        Casado,
        Divorciado,
        Viudo
    }
```
en C#,  podemos asignarle un valor numérico a la constante, de lo contrario el lenguaje asigna un valor numérico incremental iniciando en 0. 
```csharp
enum EstadoCivil
    {
        Soltero = 1,
        Casado = 2,
        Divorciado = 3,
        Viudo=4
    }
```
Si necesitamos podemos asignarle valores que no necesariamente siguen un orden
```csharp
enum EstadoCivil
    {
        Soltero = 1,
        Casado = 5,
        Divorciado = 8,
        Viudo=11
    }
```
Como comente anteriormente, si no le asignamos un valor, C# le asigna un valor iniciando en 0,1,2 etc, existe otro caso en el que le podemos asignar un número a un solo valor, y C# le asigna a los siguientes valores un número incremental después de número asignado. por ejemplo
```csharp
enum EstadoCivil
    {
        Soltero ,
        Casado = 5,
        Divorciado,
        Viudo
    }
```
En este caso a "Soltero" se le asignará el número **0**, a casado le hemos asignado el número 5, por consiguiente Divorciado tendrá el número 6, Viudo el número 7 y así sucesivamente.

Para llamar esta función en otra clase podemos realizarlo de la siguiente manera
```csharp
class Program
    {        
        static void Main(string[] args)
        {
            int idEstadoCivil = (int)EstadoCivil.Soltero;
            var estadoCivil = EstadoCivil.Soltero;
            Console.WriteLine($"El estado civil Soltero tiene el codigo: {idEstadoCivil}");
            Console.WriteLine($"Mi estado civil actualmente es : {estadoCivil}");
        }
    }   
```
El resultado es el siguiente:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/6m2ehws6s2us0izkufzo.PNG)

podemos observar que hemos impreso por pantalla, la palabra o el valor constante y el código o numero fijo que tiene dicha constante.

Enum hace que el código sea más claro y legible. por ejemplo si nosotros queremos hacer una validación
```csharp
if(estadoCivil == 1)//uno significa Soltero
{
//código
}
```
Si tenemos más clases en las que realicemos lo mismo podemos confundirnos, después de un tiempo no sabremos que significa ese "1" a pesar del comentario, por el contrario si usamos Enum podemos observarlo de la siguiente manera
```csharp
if(estadoCivil = EstadoCivil.Soltero)
{
//Código
}
```
De esta forma el código es más comprensible.

El Enum se puede colocar en la misma clase, pero es recomendable crearlo en una clase diferente y podemos llamarla en la clase principal

##Conclusión
Utilizar Enum hará que tu código sea más entendible, si tienes datos que van a tener los mismos valores siempre es decir que sean constantes, con esto nos evitamos tener que usar solo números que en el futuro no vamos a entender de que significa.

Como siempre te dejo una infografía de resumen 
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/xsc8yr3hbx7wstwblljo.png)

Nos vemos en [Twitter](https://twitter.com/veronicaguamann) e [Instagram](https://www.instagram.com/veronicaguamann/) ;)