在C#中将超出范围的数字转换为枚举不会产生异常

Ted*_*ith 20 c# enums casting exception

以下代码不会产生异常,而是将值4传递给tst.任何人都可以解释这背后的原因吗?

 public enum testing
 { 
    a = 1,
    b = 2,
    c = 3
 }

testing tst = (testing)(4);
Run Code Online (Sandbox Code Playgroud)

Meh*_*ari 33

在C#中,与Java不同,不检查枚举.您可以拥有基础类型的任何值.这就是检查输入非常重要的原因.

if(!Enum.IsDefined(typeof(MyEnum), value))
     throw new ArgumentOutOfRangeException();
Run Code Online (Sandbox Code Playgroud)

  • 我渴望作为Java开发人员(LINQ!)有一些C#的功能,但这里的Java确实是正确的... (3认同)
  • saua:通常,Java的枚举功能更强大。但是在这种简单情况下,.NET推理是无懈可击的:在运行时检查潜在的无效标志组合非常耗时且完全无用:您会为很少使用的功能付出很多。 (2认同)