【C#】enum(列挙型)の全要素を List に変換して取得する方法

【C#】enum の全要素を List に変換して 取得する方法

はじめに

enum(列挙型)を使うと、曜日や月、年号など特定の値しかとらないデータの表現が可能になります。enum は switch 文の case 値によく使用され、条件の場合分けに活用されます。

本記事では enum で定義した全要素をリスト化して取得する方法を紹介します。

enum の全要素をリスト型(List)で取得する方法

以下にサンプルコードを記載します。

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class Test : MonoBehaviour
{
    public enum Week
    {
        Monday = 1,
        Tuesday = 2,
        Wednesday = 3,
        Thursday = 4,
        Friday = 5,
        Saturday = 6,
        Sunday = 7,
    }

    void Start()
    {
        // enum の Week をリストに変換して取得
        List<Week> weekList = Enum.GetValues(typeof(Week))
            .Cast<Week>()
            .ToList();

        Debug.Log(String.Join(Environment.NewLine, weekList));
    }

    /*
    出力結果

    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
    */
}

Enum.GetValues() を使い、指定した列挙体に含まれている定数の値の配列を取得します。その配列を Week でキャストし、ToList() でリスト型に変換しています。

CastToList()を使う際は名前空間に以下の宣言が必要です。

using System.Linq;

配列型で取得したい場合は ToList()の代わりに ToArray()を使うことで実現可能です。

// enum の Week を配列に変換して取得
Week[] weeks = Enum.GetValues(typeof(Week))
    .Cast<Week>().ToArray();

参考資料

あわせて読みたい

【C#】ゲーム開発におけるenumを用いたビット演算の活用方法 【C#】ゲーム開発における enum を用いたビット演算の活用方法 【C#】要素に重複のないリストを作成する3つの方法 【C#】要素に重複のないリストを作成する3つの方法【List】