如何防止枚举中的重复值?我想知道有没有办法防止编译具有重复键的枚举?例如,以下枚举将编译publicenumEduplicates{Unique,Duplicates=0,Keys=1,Compilation=1}而此代码Console.WriteLine(EDuplicates.Unique);Console.WriteLine(EDuplicates.Duplicate);Console.WriteLine(EDuplicates.Keys);Console.WriteLine(EDuplicates.Compilation);将打印DuplicateDuplicateKeysKeys这不是语言规范所禁止的,因此任何符合标准的C#编译器都应该允许它。你总是可以调整Mono编译器来禁止它——但坦率地说,编写一个单元测试来扫描程序集的枚举并以这种方式强制执行它会更简单。这是一个简单的单元测试,检查它,它应该更快一点:[TestMethod]publicvoidTest(){varenums=(myEnum[])Enum.GetValues(typeof(myEnum));Assert.IsTrue(enums.Count()==enums.Distinct().Count());}用于检查枚举并显示哪些特定枚举值重复的单元测试:[事实]publicvoidMyEnumTest(){varvalues=(MyEnum[])Enum.GetValues(typeof(MyEnum));varduplicateValues=values.GroupBy(x=>x).Where(g=>g.Count()>1).Select(g=>g.Key).ToArray();Assert.True(duplicateValues.Length==0,"MyEnum有重复值:"+string.Join(",",duplicateValues));}publicboolValidateAllDistinct(TypeenumType){return!Enum.GetNames(enumType).All(outerName=>Enum.GetNames(enumType).Any(innerName=>innerName==outerName?true:Enum.Parse(enumType,innerName)!=Enum.Parse(enumType,outerName)));我用于单元测试的简单测试方法。以上就是C#学习教程:枚举中如何防止重复值?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
