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
}
}
Se si esegue il codice sopra il risultato mostra:Perché Enum.Parse crea voci non definite?
Si dovrebbe mangiare almeno un 12345 al giorno.
Davvero mi aspettavo che una ArgumentException venisse lanciata se viene passato un nome sconosciuto (stringa). Prendendo un'occhiata da vicino la definizione Enum.Parse rivela:
Sommario:
converte la rappresentazione di stringa del nome o valore numerico di uno o più enumerati costanti per un oggetto equivalente elencate.Eccezioni:
ArgumentException: enumType non è un Enum. -o-- il valore è una stringa vuota o contiene solo uno spazio bianco. - oppure - valore è un nome, ma non una delle costanti denominate definite per l'enumerazione.
I.e. se viene passata una rappresentazione di stringa di un intero, viene creato un nuovo valore enum e ora viene generata un'eccezione in base alla progettazione. Ha senso ciò?
Almeno ora so di chiamare Enum.IsDefined(enumType, value)
prima Enum.Parse()
Questa è una domanda? –
Perché stai chiedendo e rispondendo alla tua stessa domanda? –
La domanda viene posta sul comportamento ... – Markus