C#特性——Description

一般来说,我们给枚举注释这样。

,写个/// <summary> 加中文注释,然后鼠标悬浮即可看到注释。

但是如何用代码获取到这个注释。

这就用到Description特性,原理不知道,我也刚学,先学会用吧。

先写个枚举

/// <summary>
/// 季节
/// </summary>
public enum Season
{
    [Description("春天,又称春季,是四季中的第一个季节,指立春至立夏期间,含节气有立春、雨水、惊蛰、春分、清明、谷雨。是万物复苏的季节。")]
    Spring = 1,
    [Description("夏天,四季中的第二个季节,英语为summer,又称“昊天”,是北半球一年中最热的季节,我国习惯将立夏作为夏天的开始,气象学上的夏季要推迟到立夏后25天左右")]
    Summer = 2,
    [Description("秋天,又称秋季,一年四季的第三季,由夏季到冬季的过渡季,北半球为9至11月,南半球为3至5月,天文为秋分到冬至。")]
    Autumn = 3,
    [Description("冬天,又称冬季。北半球一年当中最寒冷的季节,其他的为春、夏、秋。天文学上认为是从12月至2月,中国习惯指立冬到立春的三个月时间,也指农历“十、十一、十二”三个月。")]
    Winter = 4
}

写个扩展方法。

扩展方法也是一个知识点,回头有时间我写一下。

/// <summary>
/// 枚举拓展工具类
/// </summary>
public static class EnumTools
{
    /// <summary>
    /// 获取当前枚举描述
    /// </summary>
    /// <param name="enumValue"></param>
    /// <returns></returns>
    public static string GetEnumDescription(this Enum enumValue)
    {
        Type type = enumValue.GetType();
        MemberInfo[] memInfo = type.GetMember(enumValue.ToString());
        if (null != memInfo && memInfo.Length > 0)
        {
            object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
            if (null != attrs && attrs.Length > 0)
                return ((DescriptionAttribute)attrs[0]).Description;
        }
        return enumValue.ToString();
    }
}

unity新建一个脚本,调用获取枚举注释的方法

public class NewBehaviourScript : MonoBehaviour
{
     
    void Start()
    {
        Season season = Season.Spring;
        Debug.Log(season.GetEnumDescription());

        season = Season.Summer;
        Debug.Log(season.GetEnumDescription());

        season = Season.Autumn;
        Debug.Log(season.GetEnumDescription());

        season = Season.Winter;
        Debug.Log(season.GetEnumDescription());
    }

    private void Update()
    {
        
    }
}

结果显示

现在有个疑问,既然枚举可以用特性,并且代码获取到枚举的注释。 那么变量 方法类也应该可以使用此特性获取到,额回头试试

发布了57 篇原创文章 · 获赞 37 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_35030499/article/details/88292162