当阅读Jon Skeet对这个特定问题的回答How can I make it so my class variables can only be set to one of three choices?我学到了一些新的东西,我不知道在C#中,我猜测CLR类型系统。为什么即使在枚举中没有定义有效值时也允许使用枚举转换
这是什么是合法的理由:
public enum Tests
{
Zero = 0,
One,
Two
}
var nonExistantTestsValue = (Tests)1000;
这将编译完全没有问题,但我不明白为什么它应该是这样的原因。就我所能看到的而言,枚举的所有要点是将特定类型的给定变量的值限制为一定数量的选项。
如果enum
定义所强加的限制很容易被破坏,那么除了可读性问题之外,还有什么意义?你显然可以确定它是一个使用反射的有效值,但为什么这不是在编译时完成的?
这可能是一个很好的理由,它的工作方式,但我看不到它。
[?为什么铸造INT无效枚举值不会抛出异常]的可能重复(http://stackoverflow.com/questions/6413804/why-母鹿s-cast-int-to-invalid-enum-value-not-throw-exception) – nawfal