ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

C# - 列挙型(enum)について -

初めに

 C# では、列挙型(enumeration type)と呼ばれるものを利用することで、曜日などの特定の値しかとらないデータを表現することが出来ます。本記事では、列挙型について学んだことをまとめます。

列挙型(enumeration type)とは

 曜日や月、性別、年号など特定の値しか取らない型を表現するためには列挙型というものを使います。列挙型は値型になります。
 

使い方

//定義の仕方
enum 列挙型名
{
  メンバー1, メンバー2, …, メンバーn
}

//値
列挙型名.メンバー名

(例)

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

public class EnumTest : MonoBehaviour
{
    enum DayOfWeek
    {
        Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
    }

    void Start()
    {
        DayOfWeek type = DayOfWeek.Monday;
        Debug.Log(type);
    }
}

(実行結果)

列挙型の値

 列挙型はプログラムの内部では int 型で扱われています。列挙型で定義した変数を割り当てられた整数で管理することもできます

enum DayOfWeek
{
    //Monday から0, 1, 2, ..., 6 が割り当てられる
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}

 自分で番号を指定することもできます。

enum DayOfWeek
{
    //指定した整数がそれぞれ割り当てられる
    Monday = 2, Tuesday = 4, Wednesday = 6, Thursday = 3, Friday = 1, Saturday = 7, Sunday = 9
}
GetValues

 GetValues を使うことで指定した列挙体に含まれている定数の値の配列を取得します。

public static Array GetValues (Type enumType);

learn.microsoft.com

GetName, GetNames

 GetName を使うことで指定した値を持つ指定した列挙体にある定数の名前を取得します。戻り値は string になります。

public static string GetName (Type enumType, object value);

learn.microsoft.com

 似たものに GetNames があります。これは指定した列挙体に含まれている定数の名前の配列を取得します。戻り値は string[] になります。

public static string[] GetNames (Type enumType);

learn.microsoft.com

使用例
using System;
using UnityEngine;

public class EnumTest : MonoBehaviour
{
    enum DayOfWeek
    {
        Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
    }

    // Start is called before the first frame update
    void Start()
    {
        foreach(int value in Enum.GetValues(typeof(DayOfWeek)))
        {
            string name = Enum.GetName(typeof(DayOfWeek), value);
            Debug.Log($"{name}{value}番目");
        }
    }
}

参考

ufcpp.net

最後に

 列挙型についてまとめました。列挙型の良いところは配列などと違い、数値ではなく DayOfWeek.Monday のように変数そのもので書くことができることでしょうか。いちいちどれが何番目だっけ?と考えなくて済みます。