c# - 为什么即使在枚举中没有定义有效值时也允许枚举转换

标签 c# enums type-systems

阅读时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/

相关文章:

c# - 如何在 C# mongo 驱动程序中设置复数集合名称?

c# - 如何在C# winforms控件上嵌入Java控件?

c# - 如何从枚举中的数据创建对象列表?

java - 使用非静态方法作为泛型的枚举属性

c# - 如何与 C# 共享 Visual C++ DLL 中的类?

c# - Windows 通用项目不支持数据类型 "AnyName"(x :DataType for DataTemplate)

enums - 如何在 TypeScript 中创建类似类型的枚举?

haskell - 使用 Void 的实际例子

haskell - 如何摆脱这种歧义?

language-agnostic - 什么是存在类型?