枚舉自定義屬性值讀取

来源:互联网 发布:ip地址转网络字节序 编辑:程序博客网 时间:2024/06/07 16:28

如枚舉類型定義StringValue屬性,可通過下面方法獲取屬性值


public enum DtlStatus : short
{

    /// <summary>
    /// 未備料
    /// </summary>
    [StringValue("01")]
    NoStock,

    /// <summary>
    /// 備料中
    /// </summary>
    [StringValue("02")]
    Stocking,

   }

 

using System;
using System.Reflection;
 
/// <summary>
/// Enum 輔助類別
/// </summary>
public static class EnumUtility
{
    /// <summary>
    /// 取得有指定StringValueAttriubte屬性的Enum所代表的字串
    /// </summary>
    /// <param name="value">Enum 值</param>
    /// <returns>Enum所代表的字串</returns>
    public static string GetStringValue(Enum value)
    {
        Type type = value.GetType();

        FieldInfo info = type.GetField(value.ToString());

        StringValueAttribute[] attrs = info.GetCustomAttributes(
            typeof(StringValueAttribute), false) as StringValueAttribute[];

        return attrs.Length > 0 ? attrs[0].StringValue : value.ToString();
    }

    /// <summary>
    /// 依StringValueAttriubte取得相對應的Enum值
    /// </summary>
    /// <param name="type">Enum類別</param>
    /// <param name="value">StringValueAttriubte值</param>
    /// <returns>Enum值</returns>
    public static object GetEnumByStringValue(Type type, string value)
    {
        object objEnum = null;

        foreach (object obj in Enum.GetValues(type))
        {
            object tmpEnum = Enum.Parse(type, obj.ToString());

            if (EnumUtility.GetStringValue((Enum)tmpEnum) == value)
            {
                objEnum = tmpEnum;

                break;
            }
        }

        return objEnum;
    }
}
 

/// <summary>
/// 用來表示Enum所代表的字串
/// </summary>
public class StringValueAttribute : Attribute
{
    private string _stringValue;

    /// <summary>
    /// Enum 代表值
    /// </summary>
    public string StringValue
    {
        get { return _stringValue ?? ""; }
        protected set { _stringValue = value; }
    }

    /// <summary>
    /// 初始Enum所代表的字串值
    /// </summary>
    /// <param name="enumValue">Enum 所代表的字串值</param>
    public StringValueAttribute(string enumValue)
    {
        this.StringValue = enumValue;
    }
}