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.