2012-07-06 116 views
0
enum MyEnum 
{ 
type1, 
type2, 
type3 
} 

public void MyMethod<T>() 
{ 
... 
} 

如何使enum在每個枚舉上觸發MyMethod<T>在模板中枚舉類型的foreach

我嘗試用

foreach (MyEnum type in Enum.GetValues(typeof(MyEnum))) 
{...} 

但還是什麼都不知道如何使用這個type裏面的foreach與 MyMethod<T>爲T

+0

你想做些什麼? – V4Vendetta 2012-07-06 11:54:24

回答

3

這是你正在嘗試做什麼?

class Program 
{ 
    static void Main(string[] args) 
    { 
     EnumForEach<MyEnum>(MyMethod); 
    } 

    public static void EnumForEach<T>(Action<T> action) 
    { 
     if(!typeof(T).IsEnum) 
      throw new ArgumentException("Generic argument type must be an Enum."); 

     foreach (T value in Enum.GetValues(typeof(T))) 
      action(value); 
    } 

    public static void MyMethod<T>(T enumValue) 
    { 
     Console.WriteLine(enumValue); 
    } 
} 

寫入控制檯:

type1 
type2 
type3 
0

你可以做

private List<T> MyMethod<T>() 
{ 
    List<T> lst = new List<T>; 

    foreach (T type in Enum.GetValues(source.GetType())) 
    { 
     lst.Add(type); 
    } 

    return lst; 
} 

,並調用它as

List<MyEnum> lst = MyMethod<ResearchEnum>(); 
+0

我不認爲你會在枚舉MyEnum上得到'GetType()' – V4Vendetta 2012-07-06 12:01:06

0

此代碼片段演示瞭如何在消息框中顯示所有枚舉值作爲鏈接的字符串。以同樣的方式,您可以使該方法在枚舉上執行您想要的操作。

namespace Whatever 
{ 
    enum myEnum 
    { 
     type1,type2,type3 
    } 

    public class myClass<T> 
    { 
     public void MyMethod<T>() 
     { 
      string s = string.Empty; 
      foreach (myEnum t in Enum.GetValues(typeof(T))) 
      { 
       s += t.ToString(); 
      } 
      MessageBox.Show(s); 
     } 
    } 

    public void SomeMethod() 
    { 
     Test<myEnum> instance = new Test<myEnum>(); 
     instance.MyMethod<myEnum>(); //wil spam the messagebox with all enums inside 
    } 
}