2009-01-29 106 views
18

你可以傳遞一個標準的c#枚舉作爲參數嗎?C#枚舉作爲函數參數?

例如:

enum e1 
{ 
    //... 
} 

enum e2 
{ 
    //... 
} 

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

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

通過這樣做,我希望能取得任何給定的枚舉內的所有名稱。迭代代碼是什麼樣的?

回答

26

This!

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

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

編輯:我的壞,你沒有迭代

注意:我知道我可以在我的foreach語句中執行GetNames()調用,但我更喜歡首先將該類型的事件分配給方法調用,因爲它對於調試非常方便。

+0

我想結果可能分配到的東西。 :-) – tvanfosson 2009-01-29 15:46:23

+0

yeah whups ...對不起,我很興奮:D – 2009-01-29 15:47:44

3

使用Enum.GetNames(typeof(e))方法,這將返回一個帶有名稱的字符串數組。

您也可以使用Enum.GetValues獲取對應值。

Edit -Whoops - 如果您將參數作爲Enum傳遞,則需要使用e.GetType()而不是typeof(),如果您已將參數作爲實際的Enum類型名稱傳遞,則將使用該類型。

3

你的意思是類似Enum.GetNames?

3

Enum.GetValues Enum.GetNames

所以像...

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

像這樣:

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

正確的是:

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

你會有麻煩e如果您嘗試直接傳遞一個enummyFunc,如下面的例子:

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