枚举为字典键

假设有

enum SomeEnum { One, Two, Three }; 

SomeEnum是一个枚举,所以它应该从Enuminheritance,所以如果我写:

 Dictionary aDictionary = new Dictionary(); 

编译器抱怨它不能隐式地将SomeEnum转换为Enum?

我相信这是因为协方差 。

简而言之:

aDictionary将是Dictionary ,但在当前上下文中,它被称为Dictionary

如果你的声明被允许,编译器应该让你做:

 aDictionary.Add(someValueFromAnotherEnumUnrelatedToSomeEnum, aValue); 

这显然与字典的实际类型不一致。

这就是默认情况下不允许使用协方差的原因,您必须在有意义的情况下明确启用协方差。

结论是您必须准确指定类型:

 Dictionary aDictionary = new Dictionary(); 

Enum在其声明中不是一个等于SomeEnum的类。 它应该是

 Dictionary aDictionary = new Dictionary();