¿Cómo obtener el valor de una enumeración desconocida por nombre de enumeración y nombre de valor?

perdón por hacer esta pregunta, pero no encontré la solución correcta para esta tarea:

Tengo un Enum, que se llama “myEnum” (MyEnum no es conocido por la función) Necesito obtener el valor int de un Valor de myEnum

Ejemplo:
Un progtwigdor llamó a su enumeración “myEnum”:

public enum myEnum { foo = 1, bar = 2, } 

mi función debería hacer lo siguiente: obtener el valor de “foo” de “myEnum” por cadena

La función debe abrirse por:

  public int GetValueOf(string EnumName, string EnumConst) { } 

así que cuando el Progtwigdor A lo abre por:

  int a = GetValueOf("myEnum","foo"); 

debe devolver 1

y cuando el Progtwigdor B tiene un Enum llamado “mySpace”, quiere devolver “barra” con Valor 5

 int a = GetValueOf("mySpace","bar") 

debe devolver 5

¿Cómo puedo hacer esto?

Puede usar Enum.Parse para hacer esto, pero necesitaría el nombre de tipo completamente calificado del tipo Enum, es decir: "SomeNamespace.myEnum" :

 public static int GetValueOf(string enumName, string enumConst) { Type enumType = Type.GetType(enumName); if (enumType == null) { throw new ArgumentException("Specified enum type could not be found", "enumName"); } object value = Enum.Parse(enumType, enumConst); return Convert.ToInt32(value); } 

También tenga en cuenta que esto utiliza Convert.ToInt32 lugar de una Convert.ToInt32 . Esto manejará los valores de enumeración con tipos subyacentes que no son Int32 . Sin embargo, esto aún generará una OverflowException si su enumeración tiene un valor subyacente fuera del rango de un Int32 (es decir, si es un valor de ulong, ya que el valor es> int.MaxValue ).

Por favor, inténtalo

 int result = (int) Enum.Parse(Type.GetType(EnumName), EnumConst); 

Supongo que está intentando crear una instancia de la enumeración a partir del valor de la cadena (su nombre), entonces le sugeriré que obtenga los miembros a través de la reflexión y luego compare.

Tenga en cuenta que la reflexión añade un poco de sobrecarga .

No me queda claro si el nombre del tipo de enumeración debe especificarse como una cadena.

Debe usar Enum.TryParse para obtener el valor de Enum. En combinación con un método genérico, podrías hacer algo como esto:

 public int? GetValueOf(string EnumConst) where T : struct { int? result = null; T temp = default(T); if (Enum.TryParse(EnumConst, out temp)) { result = Convert.ToInt32(temp); } return result; } 

Para llamarlo usa esto:

 int? result = GetValueOf("bar"); if (result.HasValue) { //work with value here. }