2

以下の関数に渡される列挙型のオブジェクトのリストを作成する必要があります。それがどのタイプになるかはわかりませんが、私のプロジェクトで考えられる多くの列挙のいずれかである可能性があります。

public static List<object> CreateEnumList(Enum enumeration)
{ 
    List<object> returnList = new List<object>();
    for (int enumIndex = 0; enumIndex < Enum.GetNames(enumeration.GetType()).Length; enumIndex++)
        returnList.Add((enumeration.GetType())enumIndex);
    return returnList;
}

型キャストを正しく機能させるにはどうすればよいですか?戻り値はオブジェクトのリストでなければなりません。ありがとうございました

4

4 に答える 4

6

これで十分です

public static List<object> CreateEnumList(Enum enumeration)
{ 
    return Enum.GetValues(enumeration.GetType()).Cast<object>().ToList();
}
于 2012-07-03T13:17:19.723 に答える
3

解決策1

ジェネリック列挙型からリストへのコンバーター(C#)ユーティリティライブラリ用の1つ...

列挙型を取り、各列挙項目が入力されたジェネリックリストを返します。

public static List<T> EnumToList<T>()
{
    Type enumType = typeof (T);

    // Can't use type constraints on value types, so have to do check like this
    if (enumType.BaseType != typeof(Enum))
        throw new ArgumentException("T must be of type System.Enum");

    Array enumValArray = Enum.GetValues(enumType);

    List<T> enumValList = new List<T>(enumValArray.Length);

    foreach (int val in enumValArray) {
        enumValList.Add((T)Enum.Parse(enumType, val.ToString()));
    }

    return enumValList;
} 

解決策2

IEnumerable<SomeEnum>これにより、列挙型のすべての値のが返されます。

Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>();

それをにしたい場合は、の後List<SomeEnum>に追加してください。.ToList().Cast<SomeEnum>()

public static List<T> CreateEnumList<T>(Enum enumeration)  
{
    return Enum.GetValues(typeof(T)).Cast<T>().ToList();
}

ここをチェックしてください:C#で列挙型をリストに変換するにはどうすればよいですか?

于 2012-07-03T13:18:31.657 に答える
1

Enum.Parse必要なことを正確に実行します。

returnList.Add(Enum.Parse(enumeration.GetType(), enumIndex.ToString()));

たとえば、これは次のように出力しbます。

enum myEnum { a, b, c }
static void Main(string[] args)
{
    var e = Enum.Parse(typeof(myEnum), "1");
    Console.WriteLine(e);
}
于 2012-07-03T13:18:17.163 に答える
0

どうですか

public IList<object> GetBoxedEnumValues<TEnum>()
{
    Type enumType = typeOf(TEnum);

    if (!enumType.IsEnum)
    {
        throw new NotSupportedException(
            string.Format("\"{0}\" is not an Enum", enumType.Name));
    }

    return Enum.GetValues(enumType).Cast<object>().ToList();      
}
于 2012-07-03T13:29:53.807 に答える