EnumHelperクラス(C#)

プログラミング.NET Framework 第4版 (Microsoft Press)

プログラミング.NET Framework 第4版 (Microsoft Press)

EnumHelperクラス(C#)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Reflection;

namespace Utility.Helper
{
    /// <summary>
    /// 列挙型ヘルパークラス
    /// </summary>
    public static class EnumHelper
    {
        #region 定義チェック
        /// <summary>
        /// 定義チェック
        /// </summary>
        /// <typeparam name="Type">列挙型</typeparam>
        /// <param name="value">数値</param>
        /// <returns>定義されている場合はtrue、そうでなけれfalse</returns>
        public static bool IsDefined<Type>(int value)
        {
            return Enum.IsDefined(typeof(Type), value);
        }
        #endregion

        #region 数値から文字列へ変換
        /// <summary>
        /// 文字列へ変換
        /// </summary>
        /// <typeparam name="Type">列挙型</typeparam>
        /// <param name="value">数値</param>
        /// <returns>文字列を返却(定義されていない場合は空文字を返却)</returns>
        public static string ConvertString<Type>(int value)
        {
            return Enum.GetName(typeof(Type), value);
        }
        #endregion

        #region 数値から列挙型に変換
        /// <summary>
        /// 数値から列挙型に変換
        /// </summary>
        /// <typeparam name="Type">列挙型</typeparam>
        /// <param name="value">数値</param>
        /// <returns>列挙型</returns>
        public static Type ConvertEnum<Type>(int value)
        {
            return (Type)Enum.ToObject(typeof(Type), value);
        }
        #endregion

        #region 文字列から列挙型に変換
        /// <summary>
        /// 文字列から列挙型に変換
        /// </summary>
        /// <typeparam name="Type">列挙型</typeparam>
        /// <param name="value">文字列</param>
        /// <returns>列挙型</returns>
        public static Type ConvertEnum<Type>(string value)
        {
            return (Type)Enum.Parse(typeof(Type), value, true);
        }
        #endregion

        #region 列挙体のメンバの名前を取得
        /// <summary>
        /// 列挙体のメンバの名前を取得
        /// </summary>
        /// <typeparam name="Type">列挙型</typeparam>
        /// <returns>列挙体のメンバの名前</returns>
        public static IEnumerable<string> GetNames<Type>()
        {
            return typeof(Type).GetEnumNames();
        }
        #endregion

        #region 列挙体のメンバの値を取得
        /// <summary>
        /// 列挙体のメンバの値を取得
        /// </summary>
        /// <typeparam name="Type">列挙型</typeparam>
        /// <returns>列挙体のメンバの値</returns>
        public static Array GetValues<Type>()
        {
            return typeof(Type).GetEnumValues();
        }
        #endregion

        #region 列挙体のリストを取得
        /// <summary>
        /// 列挙体のリストを取得
        /// </summary>
        /// <typeparam name="Type">列挙型</typeparam>
        /// <returns>列挙体のリスト</returns>
        public static List<Type> GetList<Type>()
        {
            return Enum.GetValues(typeof(Type)).Cast<Type>().ToList();
        } 
        #endregion

        #region Descriptionを取得
        /// <summary>
        /// Descriptionを取得
        /// </summary>
        /// <param name="en">Enum値</param>
        /// <returns>Description</returns>
        public static string GetDescription(Enum en)
        {
            Type type = en.GetType();
            MemberInfo[] memInfo = type.GetMember(en.ToString());

            if (memInfo != null && memInfo.Length > 0)
            {
                object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
                if (attrs != null && attrs.Length > 0)
                {
                    return ((DescriptionAttribute)attrs[0]).Description;
                }
            }

            return en.ToString();
        }
        #endregion

        #region Enumの値とDescriptionの値を設定したDictionaryを返却
        /// <summary>
        /// Enumの値とDescriptionの値を設定したDictionaryを返却
        /// </summary>
        /// <typeparam name="Type">列挙型</typeparam>
        /// <returns>Enumの値とDescriptionの値を設定したDictionary</returns>
        public static Dictionary<int, string> GetDictionary<Type>()
        {
            var dic = new Dictionary<int, string>();

            foreach (var item in EnumHelper.GetValues<Type>())
            {
                dic.Add((int)item, EnumHelper.GetDescription((Enum)item));
            }

            return dic;
        }
        #endregion
    }
}