2010-07-25 52 views
31

Tengo una enumeración que tiene diferentes colores. Me gustaría pasar alguna función a int y hacer que devuelva el nombre del color que está en la enumeración en esa posición.Obtener nombre de enum cuando se conoce el valor

¿Cuál es la manera de hacer esto?

+1

¿Y por qué no pasar la enumeración al método? y ¿Qué espera que sea el resultado si el int pasado no coincide con el valor de su enumeración? –

Respuesta

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

Aunque me gusta la respuesta de Tomás, esto tiene el beneficio de ser al grano. Gracias. – WedTM

7

Si su enumeración con colores lleva el nombre MyColorEnumName, Try

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

Otra opción es utilizar el método estático GetName:

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

Esto tiene la ventaja de que el código habla por sí mismo. Debería ser obvio que devuelve el nombre de la enumeración (que puede ser un poco difícil de realizar cuando se utiliza, por ejemplo, el método ToString).

+0

Me ayudó en una situación para obtener el nombre enum del valor en la página de visualización para verificar los roles del usuario para navegar a las páginas respectivamente. –

2

Si le importa el rendimiento, tenga cuidado con el uso de cualquiera de las sugerencias que se dan aquí: todas usan la reflexión para dar un valor de cadena para la enumeración. Si el valor de la cadena es lo que más necesitará, será mejor que use cadenas. Si aún desea seguridad tipo, defina una clase y una colección para definir sus "enumeraciones", y haga que la clase repita su nombre en la anulación de ToString().

+0

¿Por qué tantas cosas aparentemente simples en C# tienen implicaciones de rendimiento dolorosas? –

+2

Porque es un lenguaje de programación? – jedmao

+1

No es que se trate de una operación común: los nombres enum no pueden contener espacios, por lo que rara vez querrá usarlos como "nombres descriptivos" para algo. – mquander

12

En C# 6 puede usar nameof.

nameof(YourEnum.Something) 

resultados en:

something 
0

a continuación es el ejemplo para obtener el nombre de enumeración basada en el valor de color.

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(); 
     } 
    } 
Cuestiones relacionadas