class Program
{
static void Main(string[] args)
{
string value = "12345";
Type enumType = typeof(Fruits);
Fruits fruit = Fruits.Apple;
try
{
fruit = (Fruits) Enum.Parse(enumType, value);
}
catch (ArgumentException)
{
Console.WriteLine(String.Format("{0} is no healthy food.", value));
}
Console.WriteLine(String.Format("You should eat at least one {0} per day.", fruit));
Console.ReadKey();
}
public enum Fruits
{
Apple,
Banana,
Orange
}
}
Si se ejecuta el código anterior muestra el resultado:¿Por qué Enum.Parse crea entradas indefinidas?
Usted debe comer por lo menos un 12,345 por día.
Realmente esperaba que se lanzara una ArgumentException si se pasa un nombre desconocido (cadena). Tomando una mirada cercana a la definición Enum.Parse revela:
Resumen:
Convierte la representación de cadena del nombre o valor numérico de una o más constantes enumeradas a un objeto equivalente enumerado.Excepciones:
ArgumentException: enumType no es una enumeración. -o-- value es una cadena vacía o solo contiene espacios en blanco. -o-- valor es un nombre, pero no una de las constantes con nombre definidas para la enumeración.
I.e. si se pasa una representación de cadena de un entero, se crea un nuevo valor enum y ahora se lanza una excepción por diseño. ¿Esto tiene sentido?
Al menos ahora sé que llamar Enum.IsDefined(enumType, value)
antes Enum.Parse()
¿Esto es una pregunta? –
¿Por qué preguntas y respondes tu propia pregunta? –
La pregunta es sobre el comportamiento ... – Markus