2013-08-08 2 views
0

내가 enum이있는 내가 같이 보이는 음악 장르 값을 저장해야 배열로 열거 치료 이 같은 음악 genre.Something에 따라 : 내가 치료를 수행 할 작업을C#을 내 프로젝트에서

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

내이 같은 array.Something 같은 switch 경우 enum :

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에 대해 나는 다른 이름을 갖고 싶어한다. 그래서 그들을 넘겨 준다. 그래서 장르를 확인하기 위해이 스위치를 만든다. Rock은 ListBoxItem을 ROCK으로 설정하고 ListBox에 추가한다.

+1

왜 foreach입니까? (열거 형을 통해 전환 할 수 있음) – Sayse

+1

정확히 무엇을하려고하는지 알려주시겠습니까? 어레이가있는 것보다 훨씬 더 좋은 해결책이있을 수 있습니다. – x4rf41

+0

나는 그가 이와 같은 것을 원한다고 생각합니다. http://stackoverflow.com/questions/482729/c-sharp- enum-indexing-a-system-array? 가능한 복제 또는 적어도 유사합니까? – butterbox

답변

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; 
        } 
       } 
2

나는 모든 값을 저장하는 정적 배열을 사용, 예를 들어 ... 일부 개조하면 되겠 어을하지 않으면 정말 가능하다고 생각하지 않습니다

이제

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

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

편집을 I 당신이 필요로하는 것을 이해하십시오. 실제로 목록을 컨트롤에 바인딩하려고합니다. 난 당신이 당신은 단지 설명을 필요가 있다고 생각하면 당신의 열거에 사용하는 속성을 시도하고 열거 항목을 검색하는 일반적인 방법을 작성하고 객체로 포장 할 수 있습니다 생각, 뭔가 같은 :

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... 

당신은 할 수있다 (예를 들어, 타입 제약을 사용하여 더 나은 결과를 내기 위해) 여러분의 요구를 충족시키기 위해 이것을 더 조정하십시오. 더 중요한 것은 모든 enum 타입을 제공하는 제네릭 클래스가 될 것입니다 ...

+0

나는 oimitro가 물었던 것을 설명 할 때까지 질문을 이해하지 못했습니다. – nabuchodonossor

+0

아아 설명 태그는 내가 찾고자했던 것입니다. +1 – Sayse

1

편집에 따르면, 원하는

foreach(var genre in Enum.GetNames(typeof(Genres))) 
{ 
    listBox.Items.Add(genre.ToUpperInvariant()); 
}