2010-07-25 16 views
31

Ich habe eine Enum, die verschiedene Farben hat. Ich würde gerne eine Funktion übergeben eine int und haben Sie den Farbnamen, der in der Enum in dieser Position ist.Get enum name wenn Wert bekannt ist

Wie geht das?

+1

Und warum nicht die Enum zu der Methode übergeben? und Was erwarten Sie, wenn das int übergeben wird, entspricht es nicht einem Wert Ihrer Enum? –

Antwort

66
return ((MyEnumClass)n).ToString(); 
+0

Während ich Tomas Antwort mag, hat dies den Vorteil, auf den Punkt zu kommen. Danke. – WedTM

7

Wenn Ihr Enum mit Farben MyColorEnumName benannt ist, versuchen

Enum.GetName(typeof(MyColorEnumName), enumColorValue) 
54

Eine weitere Option ist die GetName statische Methode zu verwenden:

Enum.GetName(typeof(MyEnumClass), n); 

Dies den Vorteil hat, dass der Code spricht für selbst. Es sollte offensichtlich sein, dass es den Namen der Enumeration zurückgibt (was ein wenig schwierig zu realisieren ist, wenn Sie zum Beispiel die Methode ToString verwenden).

+0

Hat mir in einer Situation geholfen, den Namen aus dem Wert auf der Ansichtsseite zu holen, um Rollen zu überprüfen, damit der Benutzer zu den Seiten navigieren kann. –

2

Wenn Sie Wert auf Leistung legen, achten Sie darauf, einen der folgenden Vorschläge zu verwenden: Sie verwenden alle Reflektion, um einen Zeichenfolgenwert für die Enumeration anzugeben. Wenn der Zeichenfolgenwert das ist, was Sie am meisten benötigen, sollten Sie besser Strings verwenden. Wenn Sie weiterhin Sicherheit eingeben möchten, definieren Sie eine Klasse und eine Sammlung, um Ihre "enums" zu definieren, und lassen Sie die Klasse ihren Namen in der ToString() - Überschreibung wiedergeben.

+0

Warum haben so viele scheinbar einfache Dinge in C# schmerzhafte Auswirkungen auf die Leistung? –

+2

Weil es eine Programmiersprache ist? – jedmao

+1

Es ist nicht so, dass dies eine übliche Operation ist - Enum-Namen können nicht einmal Leerzeichen enthalten, daher werden Sie sie selten als "freundliche Namen" für etwas verwenden wollen. – mquander

12

In C# 6 können Sie nameof verwenden.

nameof(YourEnum.Something) 

Ergebnisse in:

something 
0

Unten ist das Beispiel Enum Name auf dem Farbwert basiert zu erhalten.

class Program 
    { 
      //Declare Enum 
      enum colors {white=0,black=1,skyblue=2,blue=3 } 
     static void Main(string[] args) 
     { 
      // It will return single color name which is "skyblue" 
      string colorName=Enum.GetName(typeof(colors),2); 

      //it will returns all the color names in string array. 
      //We can retrive either through loop or pass index in array. 
      string[] colorsName = Enum.GetNames(typeof(colors)); 

     //Passing index in array and it would return skyblue color name 
      string colName = colorsName[2]; 

      Console.WriteLine(colorName); 
      Console.WriteLine(colName); 
      Console.ReadLine(); 
     } 
    }