C# 枚举作为字典键

C# 枚举作为字典键,c#,.net-2.0,C#,.net 2.0,假设有 enum SomeEnum { One, Two, Three }; SomeEnum是一个enum,所以它应该从enum继承,那么如果我写: Dictionary<Enum, SomeClass> aDictionary = new Dictionary<SomeEnum, SomeClass>(); Dictionary addictionary=newdictionary(); 编译器抱怨无法将SomeEnum隐式转换为Enum?其声明中的Enum不是

假设有

enum SomeEnum { One, Two, Three };
SomeEnum是一个enum,所以它应该从enum继承,那么如果我写:

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

编译器抱怨无法将SomeEnum隐式转换为Enum?

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

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

我相信这是因为

简言之:

aDictionary
将是一个
词典
,但在当前上下文中它被称为
词典

如果您的声明被允许,编译器应该允许您执行以下操作:

aDictionary.Add(someValueFromAnotherEnumUnrelatedToSomeEnum, aValue);
这显然与词典的实际类型不一致

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

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

Dictionary<SomeEnum, SomeClass> aDictionary = 
    new Dictionary<SomeEnum, SomeClass>();
字典词典=
新字典();

看一看。@AlessandroD'Andria文档的第一行:提供枚举的基类。基类不是父类?是的,但是枚举很奇怪,不要像其他类那样考虑枚举。@AlessandroD'Andria为什么不呢?在这种情况下,它们是等价的。以下是常规类的相同错误: