如枚舉類型定義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;
}
}