質問

Enum 型を受け取り、配列内のすべてのメンバーを返すメソッドを作成したいのですが、そのような関数を作成するにはどうすればよいですか?

たとえば、次の2つの列挙型があります:

public enum Family
{ 
   Brother,
   Sister,
   Father
}

public enum CarType
{ 
   Volkswagen,
   Ferrari,
   BMW
}

関数 GetEnumList を作成して返すようにする方法

    最初のケースでは
  1. {Family.Brother、Family.Sister、Family.Father}
  2. {CarType.Volkswagen、CarType.Ferrari、CarType.BMW} 2番目の場合。

試しました:

private static List<T> GetEnumList<T>()
{
    var enumList = Enum.GetValues(typeof(T))
        .Cast<T>().ToList();
    return enumList;
}

しかし、 InvalidOperationException が発生しました:

  

System.InvalidOperationException:ContainsGenericParametersがtrueである型またはメソッドに対して、遅延バインドされた操作を実行できません。           System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException()で           System.Reflection.RuntimeMethodInfo.Invoke(オブジェクトobj、BindingFlags invokeAttr、バインダーバインダー、Object []パラメーター、CultureInfoカルチャ、ブール値skipVisibilityChecks)           System.Reflection.RuntimeMethodInfo.Invokeで(オブジェクトobj、BindingFlags invokeAttr、バインダーバインダー、Object []パラメーター、CultureInfoカルチャ)           System.Reflection.MethodBase.Invoke(Object obj、Object [] parameters)で

編集:上記のコードは正常に機能しています。例外が発生した理由は、プロファイラーがバグを引き起こしたためです。ソリューションに感謝します。

役に立ちましたか?

解決

完全なコードは次のとおりです。

    public enum Family
    {
        Brother,
        Sister,
        Father
    }

    public enum CarType
    {
        Volkswagen,
        Ferrari,
        BMW
    }


    static void Main(string[] args)
    {
        Console.WriteLine(GetEnumList<Family>());
        Console.WriteLine(GetEnumList<Family>().First());
        Console.ReadKey();
    }

    private static List<T> GetEnumList<T>()
    {
        T[] array = (T[])Enum.GetValues(typeof(T));
        List<T> list = new List<T>(array);
        return list;
    }

他のヒント

(Family[])Enum.GetValues(typeof(Family))

これが好きですか?

private static List<string> GetEnumList<T>()
{
    return Enum.GetNames( typeof( T ) )
           .Select(s => typeof(T).Name + "." + s).ToList();
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top