为Enum项增加一个自定义Attribute,以表示此Enum项所对应的中文含义

本文介绍了一种在C#中使用自定义属性的方法,包括定义自定义属性AttachDataAttribute,扩展方法以获取这些属性,以及如何将这些属性应用于枚举类型以提供额外的数据上下文。

定义自定义属性AttachDataAttribute

代码
/// <summary>
/// 附加数据属性
/// </summary>
[AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
public class AttachDataAttribute : Attribute
{
    public AttachDataAttribute(object key, object value)
    {
        this.Key = key;
        this.Value = value;
    }

    public object Key { get; private set; }
    public object Value { get; private set; }
}

定义扩展方法

代码
public static class AttachDataExtensions
{
    public static object GetAttachedData(
        this ICustomAttributeProvider provider, object key)
    {
        var attributes = (AttachDataAttribute[])provider.GetCustomAttributes(
            typeof(AttachDataAttribute), false);
        return attributes.First(a => a.Key.Equals(key)).Value;
    }

    public static T GetAttachedData<T>(
        this ICustomAttributeProvider provider, object key)
    {
        return (T)provider.GetAttachedData(key);
    }

    public static object GetAttachedData(this Enum value, object key)
    {
        return value.GetType().GetField(value.ToString()).GetAttachedData(key);
    }

    public static T GetAttachedData<T>(this Enum value, object key)
    {
        return (T)value.GetAttachedData(key);
    }
    /// <summary>
    /// 获得枚举类型的注释
    /// </summary>
    /// <param name="enumObject"></param>
    /// <returns></returns>
    public static string GetText(this Enum enumObject)
    {
        return enumObject.GetAttachedData<string>(AttachData.Text);
    }
}

定义一个Enum(AttachData)来表示定义属性的类型

代码
public enum AttachData
{
    Text
}

为枚举项加上自定义属性

代码
public enum ProposalState
{
    /// <summary>
    /// 未提交
    /// </summary>
    [AttachData(AttachData.Text, "未提交")]
    WeiTiJiao = 1,

    /// <summary>
    /// 待审查
    /// </summary>
    [AttachData(AttachData.Text, "待审查")]
    DaiShenCha = 2,

    /// <summary>
    /// 待交办
    /// </summary>
    [AttachData(AttachData.Text, "待交办")]
    DaiJiaoBan = 3,

    /// <summary>
    /// 待承办
    /// </summary>
    [AttachData(AttachData.Text, "待承办")]
    DaiChengBan = 4,

    /// <summary>
    /// 已办结
    /// </summary>
    [AttachData(AttachData.Text, "已办结")]
    YiBanJie = 5
}

得到枚举项的自定义属性

代码
ProposalState.DaiChengBan.GetText();

转载于:https://www.cnblogs.com/yyniuznyin/archive/2010/04/07/1706665.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值