为什么我可以将无效值解析为.NET中的Enum?

War*_*uck 14 .net c# enums

为什么这甚至可能?这是一个错误吗?

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
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 14

这就是枚举在.NET中运行的方式.枚举不是限制性的一组值,它实际上只是数字的一组名称(以及一起收集这些名称的类型) - 我同意这有时会很痛苦.

如果要测试枚举中是否确实定义了值,可以Enum.IsDefined在解析后使用.如果您想以更安全的方式执行此操作,您可能需要查看包含一系列约束泛型方法的Unconstrained Melody项目.

  • 虽然.Net框架的设计者建议不要使用Enum.IsDefined(http://blogs.msdn.com/kcwalina/archive/2004/05/18/134208.aspx) (2认同)