为什么这甚至可能?这是一个错误吗?
using System;
public class InvalidEnumParse
{
public enum Number
{
One,
Two,
Three,
Four
}
public static void Main()
{
string input = "761";
Number number = (Number)Enum.Parse(typeof(Number), input);
Console.WriteLine(number); //outputs 761
}
}
答案 0 :(得分:14)
这就是枚举在.NET中运行的方式。枚举不是限制性的一组值,它实际上只是数字的一组名称(以及一起收集这些名称的类型) - 我同意这有时会很痛苦。
如果要测试枚举中是否确实定义了值,可以在解析后使用Enum.IsDefined
。如果您希望以更加类型安全的方式执行此操作,您可能需要查看包含一组受限泛型方法的Unconstrained Melody项目。
答案 1 :(得分:3)
如果您的enum
具有[Flags]
属性,则可以使用任何值组合。例如:
[Flags]
enum Test
{
A = 1,
B = 2,
C = 4,
D = 8
}
你可以这样做:
Test sample = (Test)7;
foreach (Test test in Enum.GetValues(typeof(Test)))
{
Console.WriteLine("Sample does{0} contains {1}",
(sample & test) == test ? "": " not", test);
}