枚举为字典键

时间:2013-09-10 10:40:41

标签: c# .net-2.0

假设有

enum SomeEnum { One, Two, Three };

SomeEnum是一个枚举,所以它应该从Enum继承,所以为什么我写:

Dictionary<Enum, SomeClass> aDictionary = new Dictionary<SomeEnum, SomeClass>();

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

2 个答案:

答案 0 :(得分:21)

我认为这是因为covariance

简而言之:

aDictionary将是Dictionary<SomeEnum, SomeClass>,但在当前情况下,它被称为Dictionary<Enum, SomeClass>

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

aDictionary.Add(someValueFromAnotherEnumUnrelatedToSomeEnum, aValue);

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

这就是为什么默认情况下不允许使用协方差,并且必须在有意义的情况下明确启用它。

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

Dictionary<SomeEnum, SomeClass> aDictionary = 
    new Dictionary<SomeEnum, SomeClass>();

答案 1 :(得分:1)

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

Dictionary<SomeEnum, SomeClass> aDictionary = new Dictionary<SomeEnum, SomeClass>();