Pourquoi est-il acceptable pour un enum pour avoir deux noms différents avec la même valeur numérique?

Je viens de découvrir un bug subtil où j'ai eu un enum avec deux noms unintentially partage la même valeur numérique (en rouge=10 et crimson=10). Je suis un peu surpris de découvrir que ce n'est pas une erreur de syntaxe.

public enum Colour
{
    Red=10,
    Blue=11,
    Green=12,
    Crimson=10
}
//Debug.Write(Colour.Red==Colour.Crimson) outputs True

Est-il vrai monde, la raison pourquoi ce comportement peut être utile ou ne pense que cela doit être une erreur de syntaxe?

  • J'ai pensé que j'étais si intelligent pour penser à demander ce plus de trois ans après, il a été demandé à l'origine.
  • Consultez le site web MSDN lignes directrices pour l'enum design: msdn.microsoft.com/en-us/library/ms229058.aspx Dans cet esprit, je dirais que même si c'est techniquement possible, ce n'est probablement pas conseillé.
  • ensuite, j'allais demander la même chose encore 16 mois après.
  • J'ai essayé de créer un Dictionary<ExternalEnum, TValue>ExternalEnum est externe dans une assemblée, je ne peux pas modifier. Le dictionnaire nécessaires pour avoir une valeur pour chaque valeur d'enum en ExternalEnum, mais deux valeurs dans ExternalEnum ont la même valeur numérique. J'ai ensuite obtenu une ArgumentException parce que (je pense) le dictionnaire est indexée sur la valeur numérique derrière les coulisses - depuis, j'ai dû l'exclure, le double de la valeur à partir du dictionnaire.
InformationsquelleAutor AndyM | 2010-06-30