为什么我们不能从C#中的枚举实例访问枚举值?

Lew*_*rin 6 c# java enums

这可能会被投票,但这个问题从昨天起一直困扰着我......直到我找到一个链接然后我知道我并不是真的疯了哈哈: Enum作为实例变量

我基本上是在问OP的问题.鉴于:

enum Coffee {
    BIG,
    SMALL }

public class MyClass {
    private Coffee coffee;

    // Constructor etc.
}
Run Code Online (Sandbox Code Playgroud)

虽然这是Java,但两种语言的枚举确实有所不同,我怎么也不能做咖啡.BIG或coffee.BIG.SMALL(尽管读它时没什么意义,但应该可以考虑咖啡是咖啡类型)在C#?

Jon*_*eet 10

这与枚举无关.这通常与访问静态成员有关.

Java有一个设计缺陷(IMO),它允许您通过该类型的表达式访问静态成员,就像它们是实例成员一样.它可能导致非常混乱的代码:

Thread thread = new Thread(...);
thread.start();
// This looks like it makes the new thread sleep, but it actually makes the
// current thread sleep
thread.sleep(1000);
Run Code Online (Sandbox Code Playgroud)

此外,没有无效检查,因为表达式的是无关紧要的:

Thread thread = null;
thread.sleep(1000); // No exception
Run Code Online (Sandbox Code Playgroud)

现在,考虑枚举值是隐式静态的,你可以看出为什么存在差异.

事实上,你已经承认"在阅读它时没有多大意义"这表明你内心同意这是Java中的一个缺陷,而不是在C#中:)