我想知道有没有办法防止enum重复键编译?
例如,enum下面将编译
public enum EDuplicates
{
Unique,
Duplicate = 0,
Keys = 1,
Compilation = 1
}
Run Code Online (Sandbox Code Playgroud)
虽然这段代码
Console.WriteLine(EDuplicates.Unique);
Console.WriteLine(EDuplicates.Duplicate);
Console.WriteLine(EDuplicates.Keys);
Console.WriteLine(EDuplicates.Compilation);
Run Code Online (Sandbox Code Playgroud)
会打印
Duplicate
Duplicate
Keys
Keys
Run Code Online (Sandbox Code Playgroud)
Car*_*rra 20
这是一个简单的单元测试,检查它,应该更快一点:
[TestMethod]
public void Test()
{
var enums = (myEnum[])Enum.GetValues(typeof(myEnum));
Assert.IsTrue(enums.Count() == enums.Distinct().Count());
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 17
这不是语言规范所禁止的,因此任何符合条件的C#编译器都应该允许它.您总是可以调整Mono编译器以禁止它 - 但坦率地说,编写单元测试以扫描程序集中的枚举并以这种方式强制执行它会更简单.
用于检查枚举并显示哪些特定枚举值重复的单元测试:
[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));
}
Run Code Online (Sandbox Code Playgroud)