为什么没有非整数枚举?

为什么不能创建非整数枚举? 我想知道这是一个语言设计决策,还是在编译器中实现这个问题。

换句话说,在语言中实现非整数枚举是否可行,但是没有合理的需要? 或者如果它不可行但是合理,那么会遇到什么障碍?

有人告诉我,在C#中没有这个的原因或理由很简单,非常高兴。

只有语言的设计者可以告诉你他们为什么不允许非整数枚举,但我可以告诉你最可能的解释。

最初的C没有这样做,因为它的目的(系统编程语言)是不必要的。 C ++没有这样做,因为它基于C,你可以用类来模拟它。 出于同样的原因,C#可能不会这样做。

这只是我的猜测,因为我没有参与任何这些语言的设计。

一旦你决定走上课程(DateTime),没有什么理由不去。 如果要使用枚举,可以将枚举创建为从零开始的连续整数,并使用这些枚举作为索引具有DateTime值数组。

但是我只有一个Holiday类,它在类中提供了整个kit和kaboodle:常量,get()例程,根据这些常量返回DateTime等等。

这为您提供了真正的封装,并且能够在不影响接口的情况下完全实现实现。 为什么要抛弃OOP的好处之一?

没有技术上的原因导致它无法完成,但是,我们真的更多地谈论一组常量(如果它们是相关的,可能在一个共同的命名空间内)。

在枚举中,数值通常是次要的。

在下面的:

enum Fruit { Apple, Orange, Pear, Peach } 

我们只描述一组命名常量。 我们说的是Fruit类型的变量可以采用这四个值中的一个。 每个的整数值是多少,实际上是不相关的。 只要我只通过名称引用它们,代表Apple的值是0,1,32,-53还是0.002534f并不重要。

大多数语言都允许您指定应代表每个语言的值,但这确实是次要的。 它有时是有用的,但它不是枚举的核心目的的一部分。 它们只是为您提供一组相关的命名常量,而不必为每个常量ID指定一个整数ID。

此外,枚举通常用于指定可与按位运算组合的可选标志。 如果每个值都由一个整数表示(那么你只需要选择一个使用你想要的位模式的整数),这是微不足道的。 浮点值在此上下文中没有用处。 (逐位和/或操作对浮点值没有多大意义)

我认为枚举是以这种方式进行的,因为与你想要做的相反, 枚举并不意味着保留任何有意义的数字表示

例如,枚举非常适合描述ff:

 enum Color { Black, White, Red, Yellow, Blue, //everything else in between } 

(诚​​然,颜色可以用数字表示复杂类型,但暂时放纵我)。 心情怎么样?

 enum Mood { Happy, Giddy, Angry, Depressed, Sad } 

还是品尝?

 enum Taste { Bitter, Salty, Sweet, Spicy } 

我认为你说对了。 底线是:枚举是为了表示难以用数字表示的对象或对象特征,或者没有有意义或实际的数值表示 – 因此任意赋值给整数,这是最方便的数据类型。

这与节假日相反,节假日具有数字意义

在不知道实际答案的情况下,我建议更多的是后者 – 没有真正合理的需求。

在我看来,枚举只是代表特定情况下可用的各种选项; 不要实际存储数据。

保存枚举值的变量不应被视为保持值1或2或3,即使这些是存储在该存储单元中的实际值。 它应该被认为代表周一,周二或周三(例如)。 它只具有枚举的含义,实际上不应该(尽管经常)以其他方式使用。 您对Enum值执行的操作只是编程通过Enums实现方式提供的快捷方式。