i-school - ジェネリクスを利用して文字列を指定した列挙型に変換する
 Enumの種類が増えてきた場合に、その都度変換処理を追加するのが大変(面倒)だったので
ジェネリクスを利用して、文字列を<T>に指定したenum に変換するユーティリティクラスを作成しました。

 こちらがソースです。(Githubも同じです)
https://github.com/mitsuruyamaura/ConvertEnumType


using System;

/// <summary>
/// string => enumへの変換用クラス
/// </summary>
public class ConvertEnumType {

    /// <summary>
    /// stringを指定したタイプのEnumに変換する
    /// </summary>
    public static IEnum FromString<IEnum>(string str) where IEnum : struct {
        return (IEnum)Enum.Parse(typeof(IEnum), str, true);
    }
}

ポイントとしましては、
・変換メソッドの呼び出し時、Enum.Parseのように2回同じEnumの種類を指定する必要がないこと。
・文字列の大文字・小文字の区別なくEnumに変換できること。
・文字列をEnumに変換して配列・リストにする場合にはLinqを使うと1行で書けること

 などでしょうか。whereでIEnumを指定していますが、構造体(struct)だと入ってしまうため注意が必要です。
とはいえ、これは戻り値のある処理ですので、左辺の値が戻る値と異なる場合にはコンパイル出来ずにエラーが出ます。使用間違いはないでしょう。

 これを踏まえて、サンプルクラスを作成してみます。

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

public class EnumTest : MonoBehaviour {

  // Test用にEnumを3種類用意
    public enum TIME_TYPE {
        MORNING,
        AFTERNOON,
        EVENING,
        NIGHT,
    }

    public enum DAY_TYPE {
        SUNDAY,
        MANDAY,
        TUESDAY,
        WEDNESDAY,
        THURSDAY,
        FRIDAY,
        SATURDAY
    }

    public enum SEASON_TYPE {
        SPRING,
        SUMMER,
        AUTUMN,
        WINTER
    }

    // Debug用にpublicで。インスペクター上で確認できるように
    public DAY_TYPE dayType;
    public TIME_TYPE[] timeTypeArray;
    public List<SEASON_TYPE> seasonTypeList = new List<SEASON_TYPE>();

    // 使用例
    void Start() {
        // 文字列を引数で渡した種類のEnumに変換
        string day = "friday";
        dayType = ConvertEnumType.FromString<DAY_TYPE>(day);

        // 配列用に文字列を用意
        string times = "NIGHT,afternoon,Morning";

        // この1行で上記のEnum.Parseと配列化が出来る(Select(x => (x))の引数は省略できます)
        timeTypeArray = times.Split(',').Select(ConvertEnumType.FromString<TIME_TYPE>).ToArray();

        // Listの場合も同じ
        // List用に文字列を用意して、変換
        string seasons = "summer,Winter,spring,AUTUMN";
        seasonTypeList = seasons.Split(',').Select(ConvertEnumType.FromString<SEASON_TYPE>).ToList();
    }
}

こちらが実行前。


こちらが実行後です。


 いままでJsonで取得した文字列をEnum化して配列にする際は、以下のように書いていましたので、今回のメソッドを用意することで、処理も非常にすっきりしました。

    // 配列用に文字列を用意
    string times = "NIGHT,afternoon,Morning";

    // 文字列を分割して、stringの配列を作成
    string[] strArray = timeArray.Split(',').ToArray();

    // Enum用の配列を初期化
    timeTypeArray = new TIME_TYPE[strArray.Length];

    // stringの配列をEnumに変換して配列に(Linq使わない場合)
    for (int i = 0; i < strArray.Length; i++) {
        timeTypeArray[i] = (TIME_TYPE)Enum.Parse(typeof(TIME_TYPE), strArray[i]);
    }

 以上になります。

なおこちらは、teratailにて私が質問・作成させて頂いたものを、改めて作りなおしたものです。