Il y a quelque chose que je n'arrive pas à comprendre en C#. Il est possible d'intégrer une valeur hors de l'intervalle int
dans un enum
et le compilateur ne bronche pas. Imaginez ceci enum
:
enum Colour
{
Red = 1,
Green = 2,
Blue = 3
}
Maintenant, si vous écrivez :
Colour eco;
eco = (Colour)17;
Le compilateur pense que c'est bien. Et le runtime, aussi. Euh ?
Pourquoi l'équipe C# a-t-elle décidé de rendre cela possible ? Cette décision passe à côté de l'intérêt d'utiliser les enums, je pense, dans des scénarios comme celui-ci :
void DoSomethingWithColour(Colour eco)
{
//do something to eco.
}
Dans un langage à fort typage comme C#, j'aimerais supposer que eco
détiendra toujours une Colour
valeur. Mais ce n'est pas le cas. Un programmeur pourrait appeler ma méthode avec une valeur de 17 affectée à eco
(comme dans l'extrait de code précédent), donc le code de ma méthode ne doit pas supposer que eco
détient un droit Colour
valeur. Je dois le tester explicitement et traiter les valeurs exceptionnelles comme bon me semble. Pourquoi ?
À mon humble avis, il serait beaucoup plus agréable que le compilateur émette un message d'erreur (ou même d'avertissement) lors du moulage d'une valeur hors plage. int
dans un enum
si le int
est connue au moment de la compilation. Si ce n'est pas le cas, le runtime doit lever une exception lors de l'instruction d'affectation.
Qu'en pensez-vous ? Y a-t-il une raison pour laquelle il en est ainsi ?
(Note. Il s'agit d'une question J'ai posté il y a longtemps sur mon blog mais n'a obtenu aucune réponse informative).