0

私のプロジェクトには、enum次のような音楽ジャンルの値を保存するがあります。

enum Genres { Rock,Pop,Disco,Sport,Talk,Metal,Hard_Rock,Electro,Classic_Rock}

今私のコードforeachでは、音楽のジャンルに基づいていくつかの作業を行うループが必要です。次のようなもの:

foreach(Genres genre in Enum.GetValues(typeof(Genres)))
{
     switch(genre)
     {
         case Genres.Disco:
                 //Do Something
              break;
             case Genres.Rock:
                 //Do Something
              break;
         .....
         .......
     }
}

私がやりたいことは、私enumswitch場合は配列のように扱います。次のようなものです:

foreach(Genres genre in Enum.GetValues(typeof(Genres)))
{
     switch(genre)
     {
         case Genres[0]:
                 //Do Something
              break;
             case Genres[1]:
                 //Do Something
              break;
         .....
         .......
     }
}

これは可能ですか?前もって感謝します。

EDIT

GenreItems を入力したい ListBox があります。しかし、ListBoxItemごとに異なる名前を付けたいので、それらを渡します。そのため、ジャンルを確認するためにこの切り替えを行い、大文字と小文字がロックであることを確認します。たとえば、ListBoxItemをROCKとして設定し、ListBoxに追加します。

4

3 に答える 3

2

いくつかの調整を行わない限り、実際には可能ではないと思います...たとえば、静的配列を使用してすべての値を保存します。

public static readonly Genres[] AllGenres = Enum.GetValues(typeof(Genres)).Cast<Genres>().ToArray();

// sample:
public void test()
{
   var first = AllGenres [0];
}

編集

今、私はあなたが必要なものを理解しています。実際には、リストをコントロールにバインドする必要があります。説明だけが必要だと思われる場合は、列挙型に属性を使用してから、列挙型アイテムを取得してオブジェクトとしてラップする汎用メソッドを記述してみてください。

public enum Genres
{
    [Description("Rock!!!")]
    Rock, 
    Pop, 
    Disco, 
    Sport, 
    Talk, 
    Metal, 
    Hard_Rock, 
    Electro, 
    [Description("Classic Rock")]
    Classic_Rock
}

public class EnumItem
{
    string Name { get; set; }
    string Description { get; set; }
    Enum EnumValue {get;set;}

    public static IEnumerable<EnumItem> GetValue(Type t)
    {
        // implementation using reflection/expression            
    }
}

// then you can use the retrieved list/whatever to do binding or so...

ニーズに合わせてこれをさらに微調整することもできます (たとえば、型制約を使用して改善します)。さらに重要なことに、これはすべての列挙型を提供するジェネリック クラスになります...

于 2013-08-08T09:56:17.347 に答える
1

あなたの編集によると、あなたが望むように見えます

foreach(var genre in Enum.GetNames(typeof(Genres)))
{
     listBox.Items.Add(genre.ToUpperInvariant());
}
于 2013-08-08T10:02:59.673 に答える
0

あなたはこれをやろうとしていますか?

                foreach(Genres genre in Enum.GetValues(typeof(Genres)))
                {
                    switch (genre)
                    {
                        case Genres.Classic_Rock:
                            //your code
                            break;
                        case Genres.Disco:
                            //your code
                            break;
                        default:
                            //your code
                            break;
                    }
                }
于 2013-08-08T09:56:01.227 に答える