次の列挙型を指定します。
[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、Third、Fourth、Triton、Fifth、MinorSixth、Sixth、MinorSeventh、Seventh、Octave、MinorNinth、Ninth、Tenth、Eleventh、MajorEleventh、Thirteen
良い再現もあるでしょうEnum.GetNames
。上記のグループの名前は、常に値が一致する名前の前にある必要があります。
私は基本的に、値ごとの列挙名の優先順位/優先順位のルールのドキュメントを探しています。
http://rextester.com/EJOWK87857でコードを試すことができます。
アップデート
私は今 decompiled を調べていEnum.GetNames
ます。反射を利用しているようです。そこで問題は、「反映されたフィールドの順序を制御する方法は?」です。