通過特性(attribute)為枚舉添加更多信息示例
特性(Attribute)是將額外數(shù)據(jù)關(guān)聯(lián)到一個屬性(以及其他構(gòu)造)的一種方式,而枚舉則是在編程中最常用的一種構(gòu)造,枚舉本質(zhì)上其實是一些常量值,相對于直接使用這些常量值,枚舉為我們提供了更好的可讀性。我們知道枚舉的基礎(chǔ)類型只能是值類型(byte、sbyte、short、ushort、int、uint、long 或 ulong),一般的情況下枚舉能夠滿足我們的需求,但是有時候我們需要為枚舉附加更多信息,僅僅只是使用這些值類型是不夠的,這時通過對枚舉類型應(yīng)用特性可以使枚舉帶有更多的信息。
在枚舉中使用DescriptionAttribute特性
首先引入:using System.ComponentModel 命名空間,下面是一個枚舉應(yīng)用了DescriptionAttribute特性:
enum Fruit
{
[Description("蘋果")]
Apple,
[Description("橙子")]
Orange,
[Description("西瓜")]
Watermelon
}
下面是一個獲取Description特性的擴展方法:
/// <summary>
/// 獲取枚舉描述特性值
/// </summary>
/// <typeparam name="TEnum"></typeparam>
/// <param name="enumerationValue">枚舉值</param>
/// <returns>枚舉值的描述/returns>
public static string GetDescription<TEnum>(this TEnum enumerationValue)
where TEnum : struct, IComparable, IFormattable, IConvertible
{
Type type = enumerationValue.GetType();
if (!type.IsEnum)
{
throw new ArgumentException("EnumerationValue必須是一個枚舉值", "enumerationValue");
}
//使用反射獲取該枚舉的成員信息
MemberInfo[] memberInfo = type.GetMember(enumerationValue.ToString());
if (memberInfo != null && memberInfo.Length > 0)
{
object[] attrs = memberInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0)
{
//返回枚舉值得描述信息
return ((DescriptionAttribute)attrs[0]).Description;
}
}
//如果沒有描述特性的值,返回該枚舉值得字符串形式
return enumerationValue.ToString();
}
最后,我們就可以利用該擴展方法獲取該枚舉值得描述信息了:
public static void Main(string[] args)
{
//description = "橙子"
string description = Fruit.Orange.GetDescription();
}
相關(guān)文章
C# Split分隔字符串的應(yīng)用(C#、split、分隔、字符串)
C# Split分隔字符串主要包括用字符串分隔,用多個字符來分隔,用單個字符來分隔等方法實現(xiàn),下面的具體的實現(xiàn)代碼2008-11-11