[小技巧]C#中如何为枚举类型添加描述方法

640?wx_fmt=png

背景

在我们的日常开发中,我们会经常使用枚举类型。有时我们只需要显示枚举的值或者枚举值对应名称, 但是在某些场景下,我们可能需要将枚举值显示为不同的字符串。

例: 当前我们有如下枚举Level

640?wx_fmt=png

这个枚举有4个可选值B, N, G, VG。 现在我们希望用Bad, Normal, Good, Very Good作为B, N, G, VG的显示值。

那我们会怎么做呢?通常我们最常想到的就是针对Level枚举类型编写一个扩展方法。

640?wx_fmt=png

以上的代码在我们的项目中很常用。但是这里有2个潜在的问题:

  • 我们的项目中可能不止一种枚举类型,所以我们可能就需要为每一种类型都添加一个对应的扩展方法。

  • 枚举值和枚举的显示值的代码位置是分离的,如果你查找枚举值对应的显示值,你就要先去找到对应的枚举扩展方法。

那么如何改进这部分代码,从而消除上述2个问题呢,这时候我们就要引入.NET中的文本描述属性类DescriptionAttribute。


使用DescriptionAttribute重构代码

其实.NET中已经提供了一个文本描述属性类DescriptionAttribute, 这个属性类的构造函数可以接收一段文字描述。

下面我们使用DescriptionAttribute来改造Level枚举类型。

640?wx_fmt=png

这样我们上面提到的第二个问题就解决了,现在Level枚举类型的枚举值和显示值就都封装在了一起。

那么第一个问题该怎么解决呢?

这里我们可以针对Enum类型添加扩展方法,并使用反射读取当前枚举值所对应的显示值

640?wx_fmt=png

由于Enum类型是所有枚举类型的基类型,所以所有的枚举类型都可以使用这个扩展方法。

总结

本篇博文中,我们讲解了如果如何.NET内置的文本描述属性类DescriptionAttribute来生成枚举值对应的文本,它不仅可以减少重复代码,还可以让整个枚举类型的内聚性更高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Loj#3320-「CCO 2020」旅行商问题

正题 题目链接:https://loj.ac/p/3320 题目大意 有一张nnn个点的无向完全图,每一条边是红色或者蓝色,对于每个点sss求从这个点出发的一条尽量短的经过所有点的路径。 1≤n≤20001\leq n\leq 20001≤n≤2000 解题思路 显然地猜测一下最短的长度肯定是n…

AcWing 1087. 修剪草坪28

AcWing 1087. 修剪草坪 题意: 有n个数,不能选超过连续的k个数,问所能选的最大值是多少? 题解: 我们首先分析dp过程: dp[i]表示选择完前i个数的最大值 sum[i]表示前i项和 对于第i个数,它有两个情况&#…

工业通信的开源项目 HslCommunication 介绍

前言:本项目的孵化说来也是机缘巧合的事,本人于13年大学毕业后去了一家大型的国企工作,慢慢的走上了工业软件,上位机软件开发的道路。于14年正式开发基于windows的软件,当时可选的技术栈就是MFC和C#的winform&#xff…

【地狱副本】数据结构之线段树Ⅲ——区间最值/赋值/修改/历史值操作(HDU5306,Tyvj 1518,【清华集训2015】V,HDU6315,HDU1828,POJ3162)

文章目录Gorgeous SequenceTyvj 1518 CPU监控【清华集训2015】VNaive OperationsPictureWalking RaceGorgeous Sequence HDU5306 操作 区间与xxx取min\rm minmin查询区间最大值查询区间和 比较暴力的线段树维护区间 Max : 区间最大值sub_max : 严格小于最大值的区间次大值…

Acwing 1089. 烽火传递

Acwing 1089. 烽火传递 题意: 有n个数,要保证每m个数中必须选一个,问所选数的最小总和是多少 题解: 我一开始设的状态为:dp[i]表示前i个数选完的最小值,第i个数可以选也可以不选,但是这样一个状态&…

IIS作为ASP.NET Core2.1 反向代理服务器未说的秘密

--以下内容针对 ASP.NET Core2.1,2.2出现IIS进程内寄宿 暂不展开讨论---相比ASP.NET,出现了3个新的组件:ASP.NET Core Module、Kestrel、dotnet.exe, 后面我们会理清楚这三个组件的作用和组件之间的交互原理。 ASP.NET Core 设计的初衷是开源…

程序员修神之路--分布式缓存的一条明路(附代码)

菜菜呀,由于公司业务不断扩大,线上分布式缓存服务器扛不住了呀程序员主力 Y总如果加硬件能解决的问题,那就不需要修改程序菜菜我是想加服务器来解决这个问题,但是有个问题呀程序员主力 Y总???菜…

长沙.NET技术社区正式成立

感谢大家的关注,请允许我冒昧的向大家汇报长沙.NET技术社区第一次交流会的会议进展情况。活动过程汇报2019年2月17日,继深圳,广州,西安,成都,苏州相继成立了.net社区之后,酝酿已久的长沙.net社区…

Asp.NetCore轻松学-部署到 IIS 进行托管

前言经过一段时间的学习,终于来到了部署服务这个环节,.NetCore 的部署方式非常的灵活多样,但是其万变不离其宗,所有的 Asp.NetCore 程序都基于端口的侦听,在部署的时候仅需要配置侦听地址、端口(一个或者多…

响应式编程知多少 | Rx.NET 了解下

1. 引言An API for asynchronous programming with observable streams. ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming.ReactiveX 使用可观察数据流进行异步编程的API。 ReactiveX结合了观察者…

.NET Core中的验证组件FluentValidation的实战分享

今天有人问我能不能出一篇FluentValidation的教程,刚好今天在实现我们的.NET Core实战项目之CMS的修改密码部分的功能中有用到FluentValidation,所以就以修改用户密码为实例来为大家进行一下ASP.NET Core中的验证组件FluentValidation的实战分享&#xf…

笛卡尔树详解带建树模板及例题运用(Largest Submatrix of All 1’s,洗车 Myjnie,Removing Blocks,SPOJ PERIODNI)

文章目录笛卡尔树介绍例题Largest Submatrix of All 1’s应用「POI2015」洗车 Myjnie[AGC028B] Removing BlocksSPOJ PERIODNI笛卡尔树 介绍 笛卡尔树是一种数据结构,每个点由两个值,键值key和权值val,组成 其键值满足二叉树性质 即点的左子…

如何为ASP.NET Core设置客户端IP白名单验证

本篇博文中展示了如何在ASP.NET Core应用程序中设置IP白名单验证的3种方式。你可以使用一下3种方式:使用中间件检查每个请求的远程IP地址使用Action过滤器为指定的Controller或action方法添加针对远程IP地址的检查使用IPageFilter为Razor Pages应用添加针对远程IP地…

让ASP.NET Core支持GraphQL之-GraphQL的实现原理

众所周知RESTful API是目前最流行的软件架构风格之一,它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。RESTful的优越性是毋庸置疑的,不过GraphQL也可以作为一种补充&am…

[2021-09-02 contest]CF1251C,可达性统计(bitset优化dp),Boomerang Tournament(状压dp),小蓝的好友(mrx)(treap平衡树)

文章目录CF1251C Minimize The Integeracwing164:可达性统计Facebook Hacker Cup 2016 Round 1 Boomerang Tournament[Zjoi2012]小蓝的好友(mrx)CF1251C Minimize The Integer ………………… 给你一个大整数aaa,它由nnn位数字,也可能有前导…

Entity Framework 的一些性能建议

点击上方蓝字关注“汪宇杰博客”这是一篇我在2012年写的老文章,至今适用(没错,我说的就是适用于EF Core)。因此使用微信重新推送,希望能帮到大家。自从我用了EF,每次都很关心是否有潜在的性能问题。所以每次…

微软内部全面拥抱开源流程Inner Source

微软过去几年一直是 GitHub 平台上开源贡献者最多的公司。不仅如此,微软还将继续拥抱开源,内部有一项名为 Inner Source 的计划,将开源开发流程引入到公司内部。事实上,Inner Source 已经存在于微软内部多年,包括更多代…

k8s使用helm打包chart并上传到腾讯云TencentHub

本文只涉及Helm的Chart操作,不会对其他知识进行过多描述。至于安装这块,麻烦自行百度吧,一大堆呢。在容器化的时代,我们很多应用都可以部署在docker,很方便,而再进一步,我们还有工具可以对docke…

数据结构之基环树——骑士,Island,旅行加强版,Number of Simple Paths,Traffic Network in Numazu,Card Game

文章目录[ZJOI2008]骑士[IOI2008] Island[NOIP2018 提高组] 旅行 加强版CF1454E Number of Simple PathsTraffic Network in NumazuCard Game基环树的常见解法若干个基环树互相独立断环为链(随便断一条)环外树和环外树之间的树形DP环变链后整体可以用数据…

如何在ASP.NET Core中自定义Azure Storage File Provider

主题:如何在ASP.NET Core中自定义Azure Storage File Provider作者: Lamond Lu地址: https://www.cnblogs.com/lwqlun/p/10406566.html项目源代码: https://github.com/lamondlu/AzureFileProvider背景ASP.NET Core是一个扩展性非常高的框架…