给定以下枚举:
[Flags]
public enum Intervals
{
Root = PerfectUnison,
Unison = PerfectUnison,
PerfectUnison = 1 << 0,
AugmentedUnison = MinorSecond,
MinorSecond = 1 << 1,
Second = MajorSecond,
MajorSecond = 1 << 2,
AugmentedSecond = MinorThird,
MinorThird = 1 << 3,
Third = MajorThird,
MajorThird = 1 << 4,
AugmentedThird = PerfectFourth,
DoubleAugmentedThird = Triton,
DiminishedFourth = MajorThird,
Fourth = PerfectFourth,
PerfectFourth = 1 << 5,
AugmentedFourth = Triton,
DoubleAugmentedFourth = PerfectFifth,
Triton = 1 << 6,
//...Removed for brevity, see link to code bellow
}
我正在尝试这个简单的测试:
static void Main(string[] args)
{
var values = Enum.GetValues(typeof(Intervals));
foreach (var value in values)
{
Console.WriteLine(value);
}
}
这是输出:
PerfectUnison、PerfectUnison、PerfectUnison、AugmentedUnison、AugmentedUnison、Second、Second、MinorThird、MinorThird、DiminishedFourth、DiminishedFourth、DiminishedFourth、AugmentedThird、AugmentedThird、AugmentedThird、AugmentedThird、DoubleDiminishedSixth、DoubleDiminishedSixth 等。
虽然我希望为相同值选择的枚举名称具有以下顺序:
Root, MinorSecond, Second, MinorThird, 第三, 第四, Triton, 第五, MinorSixth, Sixth, MinorSeventh, 第七, 八度, MinorNinth, 第九, 第十, 十一, MajorEleventh, 十三
一个好的复制也将是Enum.GetNames
。我希望上述组的名称应始终位于其值匹配名称之前。
我基本上是在寻找每个值的枚举名称的优先级/优先级规则的文档。
您可以在此处使用代码:http ://rextester.com/EJOWK87857 。
更新
我现在正在研究反编译Enum.GetNames
的 . 看起来它使用反射。那么问题来了,“如何控制反射场的顺序?”。