Comment empêcher les doublons de valeurs en enum?

Je me demande s’il y a un moyen d’empêcher une enum avec des clés dupliquées à comstackr?

Par exemple, cette enum ci-dessous comstackra

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

Bien que ce code

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

Va imprimer

 Duplicate Duplicate Keys Keys 

Ceci n’est pas interdit par la spécification du langage, donc tout compilateur C # conforme devrait le permettre. Vous pouvez toujours adapter le compilateur Mono pour l’interdire – mais franchement, il serait plus simple d’écrire un test unitaire pour parsingr vos assemblys pour des enums et les appliquer de cette façon.

Voici un simple test unitaire qui le vérifie, devrait être un peu plus rapide:

 [TestMethod] public void Test() { var enums = (myEnum[])Enum.GetValues(typeof(myEnum)); Assert.IsTrue(enums.Count() == enums.Distinct().Count()); } 

Test unitaire qui vérifie l’énumération et indique quelles valeurs d’énum particulier ont des doublons:

 [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: " + ssortingng.Join(", ", duplicateValues)); } 
 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))); } 

Je méthode de test simple pour votre unittest.