假设有
enum SomeEnum { One, Two, Three };
SomeEnum是一个枚举,所以它应该从Enum继承,所以为什么我写:
Dictionary<Enum, SomeClass> aDictionary = new Dictionary<SomeEnum, SomeClass>();
编译器抱怨它不能隐式地将SomeEnum转换为Enum?
答案 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>();