2009-01-29 14 views
18

Czy możesz podać standardowy C# wyliczenia jako parametr?C# enums jako parametry funkcji?

Na przykład:

enum e1 
{ 
    //... 
} 

enum e2 
{ 
    //... 
} 

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

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

W ten sposób mam nadzieję odzyskać wszystkie nazwy w obrębie danego wyliczenia. Jak wyglądałby kod iteracyjny?

Odpowiedz

26

To!

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

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

EDIT: Mam złe, to nie powiedzieć iterate.

Uwaga: Wiem, że mogłem po prostu wykonać wywołanie GetNames() w moim poleceniu foreach, ale wolę przypisać ten typ do wywołania metody, ponieważ jest on przydatny do debugowania.

+0

bym pewnie przypisać wynik do czegoś. :-) – tvanfosson

+0

yeah whups ... przepraszam, podekscytowany: D –

3

Użyj metody Enum.GetNames (typeof (e)), która zwróci tablicę ciągów znaków z nazwami.

Można również użyć metody Enum.GetValues ​​w celu uzyskania wartości odpowiednika.

Edycja -Włochy - jeśli podajesz parametr jako Wyliczenie, musisz użyć metody e.GetType() zamiast metody typeof(), której użyłbyś, gdybyś przekazał parametr jako rzeczywistą nazwę typu wyliczeniowego.

3

Masz na myśli coś takiego jak Enum.GetNames?

3

Enum.GetValues ​​ Enum.GetNames

więc coś ...

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

tak:

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

prawidłowa brzmi:

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

Będziesz mieć kłopoty e jeśli spróbujesz przepuszczanie enum bezpośrednio do myFunc, jak w poniższym przykładzie:

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

To niczego nie wyjaśnia, w rzeczywistości nie mam problemu z przekazywaniem wyliczenia funkcji w sposób, w jaki opisujesz ... – iMortalitySX

+3

'' 'Błąd: "e1" jest "typem", ale jest używane jako "zmienna" " –