18

假设有

enum SomeEnum { One, Two, Three };

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

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

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

4

2 回答 2

23

我相信这是因为covariance

简而言之:

aDictionary将是一个Dictionary<SomeEnum, SomeClass>,但在当前上下文中它被称为Dictionary<Enum, SomeClass>

如果您的声明被允许,编译器应该随后让您这样做:

aDictionary.Add(someValueFromAnotherEnumUnrelatedToSomeEnum, aValue);

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

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

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

Dictionary<SomeEnum, SomeClass> aDictionary = 
    new Dictionary<SomeEnum, SomeClass>();
于 2013-09-10T10:51:04.487 回答
2

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

Dictionary<SomeEnum, SomeClass> aDictionary = new Dictionary<SomeEnum, SomeClass>();
于 2013-09-10T10:44:37.300 回答