2017-02-18 4 views
0

Ich habe eine ENUMFarbe aus meiner eigenen 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, 
      }; 

ich das Beste aus System.Drawing.Color wählte, und ich möchte dem Zufallsprinzip wählen:

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

Wie kann ich zufällig konvertieren Farbe aus meiner Enumeration zu System.Drawing.Color. ? Ist dies ohne Schalter möglich?

+0

'rnd.Next (int)' gibt ein int zurück, wenn die Enumeration von 0 aus beginnt, können Sie direkt in Ihren Enum-Typ umwandeln. – AlirezaJ

+0

Aber System.Drawing.Color ist kein Enum, also kann ich meinen randomisierten int nicht verwenden, um den Farbwert zu erhalten. – Cezar

+2

Dann sollten Sie eine Zuordnung zwischen Ihrer Enum zu System.Color angeben. Vielleicht eine Berechnungsfunktion oder Wörterbuchsuche. – AlirezaJ

Antwort

1

Sie können Dictionary<EventColors, System.Drawing.Color> erstellen, füllen Sie es auf diese Weise:

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 

und dann:

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]; 

ODER

Sie Reflexion verwenden:

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); 
Verwandte Themen