Diversión con enumeraciones en C#. Tome una lista genérica que se crea para almacenar algunos Enum que había definido previamente y agregue algunos elementos en él. Itera con foreach o GetEnumerator<T>()
, pero especifique alguna otra enumeración luego el original y vea qué sucede. Esperaba InvalidCastException o algo así, pero funciona perfectamente :).¿Las enumeraciones solo se llaman enteros, tipos o ninguno de los dos?
Para la ilustración tomemos una aplicación de consola sencilla y crear dos enumeraciones allí: Coches y Animales:
public enum Cars
{
Honda = 0,
Toyota = 1,
Chevrolet = 2
}
public enum Animals
{
Dog = 0,
Cat = 1,
Tiger = 2
}
y hacer esto en el método principal:
public static void Main()
{
List<Cars> cars = new List<Cars>();
List<Animals> animals = new List<Animals>();
cars.Add(Cars.Chevrolet);
cars.Add(Cars.Honda);
cars.Add(Cars.Toyota);
foreach (Animals isItACar in cars)
{
Console.WriteLine(isItACar.ToString());
}
Console.ReadLine();
}
se imprimirá este en la consola:
Tiger Dog Cat
¿Por qué sucede esto? Mi primera suposición fue que enum no es realmente un Type por sí mismo, es justo e int, pero eso no es verdad: si escribimos:
Console.WriteLine(Animals.Tiger.GetType().FullName);
¡Imprimiremos su nombre completo! ¿Entonces por qué esto?
Sí muy buena respuesta. Ahora me doy cuenta de que el molde explícito entre enums de cualquier tipo no fallaría ya que son prácticamente enteros, y estaba la raíz del problema. – Aleksandar