假设已经拥有
enum SomeEnum { One, Two, Three };
SomeEnum是一个枚举类型,因此应该继承自Enum,那么为什么如果我写:
Dictionary<Enum, SomeClass> aDictionary = new Dictionary<SomeEnum, SomeClass>();
编译器报错,无法隐式转换SomeEnum为Enum?假设已经拥有
enum SomeEnum { One, Two, Three };
SomeEnum是一个枚举类型,因此应该继承自Enum,那么为什么如果我写:
Dictionary<Enum, SomeClass> aDictionary = new Dictionary<SomeEnum, SomeClass>();
编译器报错,无法隐式转换SomeEnum为Enum?我认为这是因为协变性。
简而言之:
aDictionary
将成为Dictionary<SomeEnum,SomeClass>
,但在当前上下文中,它被称为Dictionary<Enum, SomeClass>
。
如果允许你的声明,编译器应该会让你这样做:
aDictionary.Add(someValueFromAnotherEnumUnrelatedToSomeEnum, aValue);
这显然与字典的实际类型不一致。
这就是为什么默认情况下不允许协变,而在有意义的情况下必须明确启用它。
结论是您必须精确指定类型:
Dictionary<SomeEnum, SomeClass> aDictionary =
new Dictionary<SomeEnum, SomeClass>();
在其声明中,枚举不是等于 SomeEnum 的类。它应该是:
Dictionary<SomeEnum, SomeClass> aDictionary = new Dictionary<SomeEnum, SomeClass>();