国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

通過特性(attribute)為枚舉添加更多信息示例

2020-01-24 02:50:23
字體:
來源:轉載
供稿:網友

特性(Attribute)是將額外數據關聯到一個屬性(以及其他構造)的一種方式,而枚舉則是在編程中最常用的一種構造,枚舉本質上其實是一些常量值,相對于直接使用這些常量值,枚舉為我們提供了更好的可讀性。我們知道枚舉的基礎類型只能是值類型(byte、sbyte、short、ushort、int、uint、long 或 ulong),一般的情況下枚舉能夠滿足我們的需求,但是有時候我們需要為枚舉附加更多信息,僅僅只是使用這些值類型是不夠的,這時通過對枚舉類型應用特性可以使枚舉帶有更多的信息。

在枚舉中使用DescriptionAttribute特性

首先引入:using System.ComponentModel 命名空間,下面是一個枚舉應用了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();
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柏乡县| 松滋市| 镇原县| 香格里拉县| 塘沽区| 建平县| 海兴县| 新安县| 奉节县| 峨眉山市| 宜阳县| 海门市| 庆安县| 五台县| 镇沅| 湛江市| 柘荣县| 承德市| 镇坪县| 利津县| 渭南市| 东乌| 金寨县| 达孜县| 曲靖市| 佛坪县| 正宁县| 永福县| 防城港市| 呈贡县| 恩施市| 曲沃县| 砚山县| 响水县| 安新县| 东辽县| 靖西县| 兴文县| 精河县| 民和| 南昌县|