網站首頁 編程語言 正文
C#中Description特性主要用于枚舉和屬性,方法比較簡單,記錄一下以便后期使用。
擴展類DescriptionExtension代碼如下:
using System;
using System.ComponentModel;
using System.Reflection;
/// <summary>
/// 描述特性的讀取擴展類
/// </summary>
public static class DescriptionExtension
{
/// <summary>
/// 獲取枚舉的描述信息
/// </summary>
public static string GetDescription(this Enum em)
{
Type type = em.GetType();
FieldInfo fd = type.GetField(em.ToString());
string des = fd.GetDescription();
return des;
}
/// <summary>
/// 獲取屬性的描述信息
/// </summary>
public static string GetDescription(this Type type, string proName)
{
PropertyInfo pro = type.GetProperty(proName);
string des = proName;
if (pro != null)
{
des = pro.GetDescription();
}
return des;
}
/// <summary>
/// 獲取屬性的描述信息
/// </summary>
public static string GetDescription(this MemberInfo info)
{
var attrs = (DescriptionAttribute[])info.GetCustomAttributes(typeof(DescriptionAttribute), false);
string des = info.Name;
foreach (DescriptionAttribute attr in attrs)
{
des = attr.Description;
}
return des;
}
}
使用方法:
[Description("測試枚舉名")]
enum TestEnum
{
[Description("測試")]
Test1
}
[Description("測試類名")]
class TestClass
{
[Description("測試class")]
public int Test1 { get; set; }
}
//獲取枚舉類型的描述特性
string str1 = typeof(TestEnum).GetDescription();
//獲取枚舉值的描述特性
string str2 =TestEnum.Test1.GetDescription();
str2 = typeof(TestEnum).GetDescription(nameof(TestEnum.Test1));
str2 = typeof(TestEnum).GetDescription(TestEnum.Test1.ToString());
//獲取類的描述特性
string str3 = typeof(TestClass).GetDescription();
//獲取屬性的描述特性(也可以反射遍歷屬性列表)
string str4 = typeof(TestClass).GetDescription();
TestClass test = new TestClass();
str4 = typeof(TestClass).GetDescription(nameof(test.Test1));
補充:
C#利用擴展方法獲得枚舉的Description
/// <summary>
/// 擴展方法,獲得枚舉的Description
/// </summary>
/// <param name="value">枚舉值</param>
/// <param name="nameInstead">當枚舉值沒有定義DescriptionAttribute,是否使用枚舉名代替,默認是使用</param>
/// <returns>枚舉的Description</returns>
public static string GetDescription(this Enum value, Boolean nameInstead = true)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name == null)
{
return null;
}
FieldInfo field = type.GetField(name);
DescriptionAttribute attribute = System.Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attribute == null && nameInstead == true)
{
return name;
}
return attribute?.Description;
}
隨便整一個枚舉
public enum ModuleType
{
/// <summary>
/// 中國
/// </summary>
[Description("中國")]
ZH = 1,
/// <summary>
/// 美國
/// </summary>
[Description("美國")]
MG = 2
}
原文鏈接:https://www.cnblogs.com/timefiles/p/16395131.html
相關推薦
- 2023-03-18 git?push?origin?HEAD:refs/for/master?的意思分析_其它綜合
- 2023-03-29 Python之sklearn數據預處理中fit(),transform()與fit_transfor
- 2022-11-14 Python中__init__.py文件的作用_python
- 2024-01-12 如何理解 Elasticsearch 中的 Indices、Types、Documents、Fiel
- 2023-05-08 C語言超詳細講解雙向帶頭循環鏈表_C 語言
- 2022-11-25 ASP.NET?MVC使用異步Action的方法_實用技巧
- 2022-05-12 Python中賦值運算符的含義與使用方法_python
- 2022-12-28 Python標準庫之urllib和urllib3的使用及說明_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支