阅读时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
定义强加的限制如此容易被打破,那还有什么意义(除了可读性问题)?您显然可以使用反射确保它是一个有效值,但为什么不在编译时完成呢?
这可能有一个很好的理由让它以它的方式工作,但我没有看到它。
最佳答案
Enumerations本质上是独特的类型,允许您将符号名称分配给整数值。它们不用于限制变量的允许值...
关于c# - 为什么即使在枚举中没有定义有效值时也允许枚举转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6650176/