【发布时间】:2010-08-26 12:50:40
【问题描述】:
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
}
}
如果执行上面的代码,结果显示:
你应该每天至少吃一个 12345。
我真的希望在传递未知名称(字符串)时抛出 ArgumentException。仔细查看 Enum.Parse 定义会发现:
总结:
将一个或多个枚举常量的名称或数值的字符串表示形式转换为等效的枚举对象。异常:
ArgumentException:enumType 不是 Enum。 - 或 - value 为空字符串或仅包含空格。 - 或 - value 是一个名称,但不是为枚举定义的命名常量之一。
即如果传递了整数的字符串表示形式,则会创建一个新的枚举值,现在设计会抛出异常。这有意义吗?
至少我现在知道在Enum.Parse()之前打电话给Enum.IsDefined(enumType, value)
【问题讨论】:
-
你为什么要问和回答你自己的问题?
-
问题是关于行为...
-
希望我已经以一种有意义的方式解释了我的回答中的行为(或我对它的解释无论如何)。如果它没有让我知道,我会看看我能做些什么来解决这个问题=)