¿Puedes tener múltiples valores de enumeración para el mismo entero?

En .NET puede tener varios valores de enum para el mismo entero?

p.ej.

 public enum PersonGender { Unknown = 0, Male = 1, Female = 2, Intersex = 3, Indeterminate = 3, NonStated = 9, InadequatelyDescribed = 9 } 

En C #, esto está permitido, según la especificación del lenguaje C # , versión 4.

La sección 1.10 Enums no menciona la posibilidad, pero más adelante en la sección 14 Enums , vemos (en 14.3 ):


Varios miembros de la enumeración pueden compartir el mismo valor asociado. El ejemplo

 enum Color { Red, Green, Blue, Max = Blue } 

muestra una enumeración en la que dos miembros de la enumeración, Blue y Max , tienen el mismo valor asociado.

Eso funciona bien. No hay absolutamente nada de malo en el código que publicaste. Se comstack bien y funciona en código, con la advertencia de que

 PersonGender.NonStated == PersonGender.InadequatelyDescribed 

Encontré esta publicación de StackOverflow relacionada con esta pregunta. Creo que hay una discusión muy sensata de cómo funciona esto. Valores de enumeración no únicos

Ahora, también podría agregar que es mi opinión que esto sería un uso ambiguo (y por lo tanto impropio) de una enumeración. Es importante escribir un código que tenga sentido para otra persona que lo lea, y en este caso, esta enumeración me desanimaría.

Yo sugeriría que una enumeración no sería algo correcto para usar en su contexto, en lugar de eso, puede usar crear una clase y métodos que puedan resolver su propósito. Algo como esto en tu clase:

 class A { static readonly ABCD= new Dictionary { { 1, "X" }, { 2, "X" }, { 3, "Y" } { 4, "Y" } } }