c#获取枚举的描述Description和摘要Summary
2024-10-08
37
在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#中为枚举字段添加描述和摘要,并通过扩展方法获取它们的值。记得在实际应用中,你可能需要适当地处理找不到特性的情况,以及其他错误处理。
更新于:1个月前赞一波!
相关文章
- .NET C# EntityFramework(EF)连接SQLite代码示例
- .NET9 C# 13 有哪些新特性?
- C#中的String和StringBuilder的区别
- .NET C#中的IEnumerable和IEnumerator的区别
- C# Const 和 ReadOnly的区别
- C# 使用Barrier进行多线程同步
- C#发送邮件代码简洁示例(附源码下载)
- C# Word转换成Pdf的方法
- c#使用MongoDB开发LBS应用
- hprose for C#使用教程
- c#实现与Java无差异的GZip压缩和GZip解压缩
- .NET Core c#使用SkiaSharp压缩裁切图片去除水印
- c# decimal保留2位小数 并向下舍入
- .NET Core c#使用SkiaSharp压缩图片
- C#复制文件到指定文件夹
- c#获取枚举的Description
- c#读取pdf里的表格
- c# HttpClient下载图片
- c#使用HtmlAgilityPack编辑html并保存
- c#获取文件夹所有文件列表
文章评论
评论问答