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
}
}
Если выполнить код, указанный выше результат показывает:Почему Enum.Parse создает неопределенные записи?
Вы должны есть по крайней мере один 12345 в день.
Я действительно ожидал, что возникнет ArgumentException, если будет передано неизвестное имя (строка). Принимая внимательно посмотреть на определении Enum.Parse показывает:
Резюме:
Преобразует строковое представление имени или числового значения из одного или нескольких перечисленных констант к эквивалентным перечисленным объектам.Исключения:
ArgumentException: enumType не является Enum. -или-значение является пустой строкой или содержит только пробел. -или- Значение - это имя, но не одна из именованных констант, определенных для перечисления.
I.e. если передано строковое представление целого числа, создается новое значение enum, и теперь исключение вызывается дизайном. Имеет ли это смысл?
По крайней мере, теперь я знаю, называть Enum.IsDefined(enumType, value)
до Enum.Parse()
Возникает вопрос? –
Почему вы спрашиваете и отвечаете на свой вопрос? –
Вопрос о поведении ... – Markus