1. ホーム
  2. c#

[解決済み] 汎用enumをintにキャストするには?

2023-07-04 18:30:21

質問

以下のような小さなメソッドを持っています。

public void SetOptions<T>() where T : Enum
{
    int i = 0;
    foreach (T obj in Enum.GetValues(typeof(T)))
    {
        if (i == 0)
            DefaultOption = new ListItem(obj.Description(), obj.ToString());
        i++;
        DropDownList.Items.Add(new ListItem(obj.Description(), obj.ToString()));
    }
}

基本的には、enumからドロップダウンリストに入力します。 Description() は実際には列挙型のための拡張メソッドなので T は間違いなく enum .

しかし、私は obj を列挙するのと同じように、そのインデックスに (int)obj というように、enumをインデックスに変換するのですが、Tをintに変換できないというエラーが出ます。これを行う方法はありますか?

どのように解決するのですか?

これを試してみてください。

public void SetOptions<T>()
{
    Type genericType = typeof(T);
    if (genericType.IsEnum)
    {
        foreach (T obj in Enum.GetValues(genericType))
        {
            Enum test = Enum.Parse(typeof(T), obj.ToString()) as Enum;
            int x = Convert.ToInt32(test); // x is the integer value of enum
                        ..........
                        ..........
        }
    }
}