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为什么不呢?在这种情况下,它们是等价的。以下是常规类的相同错误: