¿Cómo prevenir valores duplicados en enum?

Me pregunto si hay alguna manera de evitar una enum con claves duplicadas para comstackr?

Por ejemplo, esta enum continuación comstackrá

 public enum EDuplicates { Unique, Duplicate = 0, Keys = 1, Comstacktion = 1 } 

Aunque este código

 Console.WriteLine(EDuplicates.Unique); Console.WriteLine(EDuplicates.Duplicate); Console.WriteLine(EDuplicates.Keys); Console.WriteLine(EDuplicates.Comstacktion); 

Se imprimirá

 Duplicate Duplicate Keys Keys 

Esto no está prohibido por la especificación del lenguaje, por lo que cualquier comstackdor C # compatible debería permitirlo. Siempre puedes adaptar el comstackdor Mono para prohibirlo, pero francamente sería más simple escribir una prueba unitaria para escanear tus ensamblajes para enumeraciones y aplicarlo de esa manera.

Aquí hay una prueba simple de unidad que lo verifica, debe ser un poco más rápido:

 [TestMethod] public void Test() { var enums = (myEnum[])Enum.GetValues(typeof(myEnum)); Assert.IsTrue(enums.Count() == enums.Distinct().Count()); } 
 public bool ValidateAllDistinct(Type enumType) { return !Enum.GetNames(enumType).All(outerName => Enum.GetNames(enumType).Any(innerName => innerName == outerName ? true : Enum.Parse(enumType, innerName) != Enum.Parse(enumType, outerName))); } 

I método de prueba simple para su prueba de unidad.

Prueba unitaria que verifica enum y muestra qué valores enum particulares tienen duplicados:

 [Fact] public void MyEnumTest() { var values = (MyEnum[])Enum.GetValues(typeof(MyEnum)); var duplicateValues = values.GroupBy(x => x).Where(g => g.Count() > 1).Select(g => g.Key).ToArray(); Assert.True(duplicateValues.Length == 0, "MyEnum has duplicate values for: " + string.Join(", ", duplicateValues)); }