web-dev-qa-db-fra.com

Enum en tant que clés du dictionnaire

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?

14
sblandin

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>();
20
Cristian Lupascu

Enum dans sa déclaration n'est pas une classe égale à SomeEnum. CA devrait etre 

Dictionary<SomeEnum, SomeClass> aDictionary = new Dictionary<SomeEnum, SomeClass>();
1
Krishna Sarma