2009-01-29 11 views
18

¿Se puede pasar un C# enum estándar como parámetro?C# enumera como parámetros de función?

Por ejemplo:

enum e1 
{ 
    //... 
} 

enum e2 
{ 
    //... 
} 

public void test() 
{ 
    myFunc(e1); 
    myFunc(e2); 
} 

public void myFunc(Enum e) 
{ 
    // Iterate through all the values in e 
} 

De esta manera espero para recuperar todos los nombres dentro de cualquier enumeración dada. ¿Cómo se vería el código de iteración?

Respuesta

26

Esto!

 public void Foo(Enum e) 
     { 
      var names = Enum.GetNames(e.GetType()); 

      foreach (var name in names) 
      { 
       // do something! 
      } 
     } 

EDIT: Mi mal, que se decir iterate.

Nota: Sé que podría hacer la llamada GetNames() en mi declaración de foreach, pero prefiero asignar ese tipo de cosas a una llamada de método primero, ya que es útil para la depuración.

+0

probablemente me asigna el resultado de algo. :-) – tvanfosson

+0

sí whups ... lo siento, me emocioné: D –

3

Utilice el método Enum.GetNames (typeof (e)), esto devolverá una matriz de cadenas con los nombres.

También puede usar Enum.GetValues ​​para obtener los valores equivalentes.

Editar -Objetivos: si está pasando el parámetro como Enum, necesitará usar e.GetType() en lugar de typeof() que usaría si hubiera pasado el parámetro como el verdadero nombre de tipo Enum.

3

¿Te refieres a algo así como Enum.GetNames?

3

Enum.GetValues ​​ Enum.GetNames

así que algo como ...

foreach(e1 value in Enum.GetValues(typeof(e1))) 
2

como esto:

public void myFunc(Enum e) 
    { 
     foreach (var name in Enum.GetNames(typeof(e))) 
     { 
      Console.WriteLine(name); 
     } 
    } 
0

correcta es:

public void myFunc(Enum e) 
{ 
    foreach (var name in Enum.GetNames(e.GetTye())) 
    { 
     Console.WriteLine(name); 
    } 
} 
3

Se hará tener problemas e si se intenta hacer pasar una enum directamente a myFunc, como en el siguiente ejemplo:

enum e1 {something, other}; 
myFunc(e1); // Syntax error: "e1 is a type, but is being used like a variable" 
+0

Eso no explica nada, de hecho no tengo problemas para pasar una enumeración a una función en la forma en que describes ... – iMortalitySX

+3

'' 'Error: 'e1' es un 'tipo' pero se usa como una 'variable'''' –

Cuestiones relacionadas