0
enum MyEnum
{
type1,
type2,
type3
}

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

すべての列挙型で起動するために列挙型でforachを作成する方法はMyMethod<T>

私は何かを試してみます

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

しかし、Tとしてtypeforeach内で これを使用する方法はまだわかりませんMyMethod<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

できるよ

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 に答える
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 に答える