3

次の列挙型を指定します。

[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ます。反射を利用しているようです。そこで問題は、「反映されたフィールドの順序を制御する方法は?」です。

4

1 に答える 1