經由過程特征(attribute)為列舉添加更多信息示例。本站提示廣大學習愛好者:(經由過程特征(attribute)為列舉添加更多信息示例)文章只能為提供參考,不一定能成為您想要的結果。以下是經由過程特征(attribute)為列舉添加更多信息示例正文
特征(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();
}