Supposons avoir
enum SomeEnum { One, Two, Three };
SomeEnum est un enum, donc il est supposé hériter d'Enum alors pourquoi si j'écris
Dictionary<Enum, SomeClass> aDictionary = new Dictionary<SomeEnum, SomeClass>();
Le compilateur se plaint de ne pas pouvoir convertir implicitement SomeEnum en Enum?
Je crois que c'est à cause de covariance .
En bref:
aDictionary
sera un Dictionary<SomeEnum, SomeClass>
, mais dans le contexte actuel, il est appelé Dictionary<Enum, SomeClass>
.
Si votre déclaration avait été autorisée, le compilateur devrait ensuite vous permettre de faire:
aDictionary.Add(someValueFromAnotherEnumUnrelatedToSomeEnum, aValue);
ce qui est évidemment incohérent par rapport au type de dictionnaire utilisé.
C'est pourquoi la co-variance n'est pas autorisée par défaut et vous devez l'activer explicitement dans les cas où cela a du sens.
La conclusion est que vous devez spécifier le type exactement:
Dictionary<SomeEnum, SomeClass> aDictionary =
new Dictionary<SomeEnum, SomeClass>();
Enum dans sa déclaration n'est pas une classe égale à SomeEnum. CA devrait etre
Dictionary<SomeEnum, SomeClass> aDictionary = new Dictionary<SomeEnum, SomeClass>();