0
enum MyEnum
{
type1,
type2,
type3
}

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

如何在枚举上制作 forach 以MyMethod<T>在每个枚举上触发?

我尝试一下

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

但仍然不知道如何type在 foreach 中使用 this 和MyMethod<T>as T

4

3 回答 3

4

这是你想要做的吗?

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
于 2012-07-06T12:02:35.573 回答
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
    }
}
于 2012-07-06T11:57:04.560 回答
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;
}

并将其称为

List<MyEnum> lst = MyMethod<ResearchEnum>();
于 2012-07-06T11:52:44.417 回答