2009-01-29 22 views
18

Pouvez-vous passer un enum standard C# en tant que paramètre?C# enums en tant que paramètres de fonction?

Par exemple:

enum e1 
{ 
    //... 
} 

enum e2 
{ 
    //... 
} 

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

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

En faisant cela, je l'espère pour récupérer tous les noms dans une ENUM donnée. À quoi ressemblerait le code d'itération?

Répondre

26

Ce!

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

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

EDIT: Mon mauvais, vous ne dit itérer. Remarque: Je sais que je pourrais simplement faire l'appel GetNames() dans mon instruction foreach, mais je préfère d'abord affecter ce type de chose à un appel de méthode, car c'est pratique pour le débogage.

+0

je serais probablement affecter le résultat à quelque chose. :-) – tvanfosson

+0

ouais whups ... désolé, je me suis excité: D –

3

Utilisez la méthode Enum.GetNames (typeof (e)), cela retournera un tableau de chaînes avec les noms.

Vous pouvez également utiliser Enum.GetValues ​​pour obtenir les valeurs de contrepartie.

Éditer -Whoops - si vous transmettez le paramètre comme Enum, vous devrez utiliser e.GetType() à la place de typeof() que vous utiliseriez si vous aviez passé le paramètre en tant que nom de type Enum réel.

3

Vous voulez dire quelque chose comme Enum.GetNames?

3

Enum.GetValues ​​ Enum.GetNames

donc quelque chose comme ...

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

comme ceci:

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

correcte est:

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

Vous allez avoir des problèmes e si vous essayez passer un enum directement à myFunc, comme dans l'exemple suivant:

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

Cela n'explique rien, en fait je n'ai aucun problème en passant une énumération à une fonction de la manière que vous décrivez ... – iMortalitySX

+3

'' 'Erreur: 'e1' est un 'type' mais est utilisé comme une 'variable' –