2017-02-18 18 views
0

У меня есть перечислениеЦвет от моей Enum

private enum EventColors 
      { 
       Aquamarine, 
       Azure, 
       BurlyWood, 
       CadetBlue, 
       Gainsboro, 
       Gold, 
       Gray, 
       Khaki, 
       LawnGreen, 
       LightGreen, 
       LightSkyBlue, 
       Linen, 
       MediumOrchid, 
       MediumPurple, 
       MistyRose, 
       Olive, 
       OliveDrab, 
       Orange, 
       OrangeRed, 
       Orchid, 
       PaleTurquoise, 
       Peru, 
       Pink, 
       Plum, 
       RoyalBlue, 
       SandyBrown, 
       SeaGreen, 
       SteelBlue, 
      }; 

Я выбрал лучшее из System.Drawing.Color, и я хотел бы, чтобы случайно выбрать один:

Array values = Enum.GetValues(typeof(EventColors)); 
       Random rnd = new Random(); 
       EventColors randomBar = (EventColors)values.GetValue(rnd.Next(values.Length)); 

Как я могу преобразовать случайный выбранного цвета из моего перечисления в System.Drawing.Color. ? Возможно ли это без использования переключателя?

+0

'rnd.Next (int)' return int, когда ваше перечисление начинается с 0, вы можете напрямую использовать свой тип перечисления. – AlirezaJ

+0

Но System.Drawing.Color не является Enum, поэтому я не могу использовать свой рандомизированный int для получения значения цвета. – Cezar

+2

Затем вы должны указать отображение между вашим перечислением в System.Color. Возможно, функция вычисления или поиск словаря. – AlirezaJ

ответ

1

Вы можете создать Dictionary<EventColors, System.Drawing.Color>, заполнить его таким образом:

Dictionary<EventColors, System.Drawing.Color> colors = new Dictionary<EventColors, System.Drawing.Color>(); 

colors.Add(EventColors.Aquamarine, System.Drawing.Color.Aquamarine); 
colors.Add(EventColors.Azure, System.Drawing.Color.Azure); 
//... other colors 

, а затем:

Array values = Enum.GetValues(typeof(EventColors)); 
Random rnd = new Random(); 
EventColors randomBar = (EventColors)values.GetValue(rnd.Next(values.Length)); 

System.Drawing.Color someColor = colors[randomBar]; 

ИЛИ

Вы можете использовать отражение:

Array values = Enum.GetValues(typeof(EventColors)); 
Random rnd = new Random(); 
EventColors randomBar = (EventColors)values.GetValue(rnd.Next(values.Length)); 

string name = Enum.GetName(typeof(EventColors), randomBar); 
var type = typeof(System.Drawing.Color); 
System.Drawing.Color systemDrawingColor = (System.Drawing.Color)type.GetProperty(name).GetValue(null);