雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

c#获取枚举的描述Description和摘要Summary

2024-10-08 16

在C#中,获取枚举的描述(Description)和摘要(Summary)通常需要使用自定义的特性来实现。下面是一个示例,演示如何为枚举添加Description和Summary,并在代码中获取它们:

首先,你需要创建两个自定义的特性类,一个用于描述(Description),另一个用于摘要(Summary):

using System;

[AttributeUsage(AttributeTargets.Field, Inherited = false, AllowMultiple = false)]
sealed class DescriptionAttribute : Attribute
{
    public string Description { get; }

    public DescriptionAttribute(string description)
    {
        Description = description;
    }
}

[AttributeUsage(AttributeTargets.Field, Inherited = false, AllowMultiple = false)]
sealed class SummaryAttribute : Attribute
{
    public string Summary { get; }

    public SummaryAttribute(string summary)
    {
        Summary = summary;
    }
}

然后,你可以在枚举的字段上应用这些特性:

public enum MyEnum
{
    [Description("This is the first option.")]
    [Summary("Summary for Option 1")]
    Option1,

    [Description("This is the second option.")]
    [Summary("Summary for Option 2")]
    Option2,

    // ...其他枚举值...
}

接下来,你可以编写一个辅助方法来获取枚举字段上的特性信息:

using System;
using System.ComponentModel;
using System.Reflection;

public static class EnumExtensions
{
    public static string GetDescription(this Enum value)
    {
        FieldInfo fieldInfo = value.GetType().GetField(value.ToString());

        if (fieldInfo != null)
        {
            DescriptionAttribute[] attributes = 
                (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);

            if (attributes.Length > 0)
            {
                return attributes[0].Description;
            }
        }

        return value.ToString();
    }

    public static string GetSummary(this Enum value)
    {
        FieldInfo fieldInfo = value.GetType().GetField(value.ToString());

        if (fieldInfo != null)
        {
            SummaryAttribute[] attributes = 
                (SummaryAttribute[])fieldInfo.GetCustomAttributes(typeof(SummaryAttribute), false);

            if (attributes.Length > 0)
            {
                return attributes[0].Summary;
            }
        }

        return value.ToString();
    }
}

现在,你可以使用上述扩展方法来获取枚举字段的描述和摘要信息:

MyEnum option = MyEnum.Option1;

string description = option.GetDescription();
string summary = option.GetSummary();

Console.WriteLine($"Description: {description}");
Console.WriteLine($"Summary: {summary}");

这样,你就可以在C#中为枚举字段添加描述和摘要,并通过扩展方法获取它们的值。记得在实际应用中,你可能需要适当地处理找不到特性的情况,以及其他错误处理。

更新于:10天前
赞一波!

文章评论

评论问答