C#使用Enum.TryParse()实现枚举安全转换
作者:Darren?Ji 发布时间:2021-10-27 05:29:06
标签:C#,Enum,TryParse,枚举,安全,转换
在项目中,有时候会用到领域枚举和DTO枚举的映射和转换。有一个现实的问题是:如果领域枚举项发生变化,而DTO枚举项没有及时更新,这样会造成映射不上的问题。那么,如何避免此类问题呢?
先看领域枚举和DTO枚举映射完好的情况。
class Program
{
static void Main(string[] args)
{
var queryOrderStatus = (QueryOrderStatus)OrderState.Active;
Console.WriteLine(queryOrderStatus);
Console.ReadKey();
}
}
public enum OrderState
{
NotActivated,
Active,
RequiresReActivation
}
public enum QueryOrderStatus
{
NotActivated,
Active,
RequiresReActivation
}
输出结果:Active
假如,我们在领域模型中加了一个枚举项
public enum OrderState
{
NotActivated,
Active,
RequiresReActivation,
Locked
}
在客户端。
class Program
{
static void Main(string[] args)
{
var queryOrderStatus = (QueryOrderStatus)OrderState.Locked;
Console.WriteLine(queryOrderStatus);
Console.ReadKey();
}
}
输出结果:3
如果再把客户端改成这样:
class Program
{
static void Main(string[] args)
{
var queryOrderState = (QueryOrderStatus)OrderState.Locked;
if(queryOrderState == QueryOrderStatus.Active)
Console.WriteLine("Active");
if(queryOrderState == QueryOrderStatus.NotActivated)
Console.WriteLine("NotActivated");
if(queryOrderState == QueryOrderStatus.RequiresReActivation)
Console.WriteLine("RequiresReActivation");
Console.ReadKey();
}
}
输出结果:什么都没有
也就是说,在领域枚举发生变化的时候,DTO枚举没有适时更新,会造成映射不上的问题。如何避免呢?
--使用Enum.TryParse()实现枚举的安全转换
使用Enum.TryParse(),把客户端改成:
class Program
{
static void Main(string[] args)
{
var domainState = OrderState.Locked;
QueryOrderStatus queryState;
if (!Enum.TryParse(domainState.ToString(), out queryState))
{
throw new FormatException("枚举项 '"+domainState+"' 在对应的DTO中不存在" );
}
Console.ReadKey();
}
}
运行报错:
这正是我们预设的报错方式。
来源:https://www.cnblogs.com/darrenji/p/3852737.html


猜你喜欢
- nacos使用占位符${}进行参数配置的方法有的时候,我们的nacos会出现一个配置文件里,有多个配置项对应的值都是一样的,这个时候naco
- 1.使用WIFI首先设置用户权限<uses-permission android:name="android.permiss
- 成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的。下面就让我们来看看代码编写的30条建议吧。(1) 类名首字母应该大写。字段
- 本文以Java代码为例介绍如何实现将彩色PDF文件转为灰度(黑白)的PDF文件,即:将PDF文档里面的彩色图片或者文字等通过调用PdfGra
- Java 利用poi把数据库中数据导入Excel效果:使用时先把poi包导入工程的path,注意只需要导入poi包即可,下载后有三个jar包
- 概述Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,
- 在spring cloud系列章节中,本来已经写了几个章节了,但是自己看起来有些东西写得比较杂,所以重构了一下springcloud的章节内
- java static块和构造函数的实例详解构造函数不写时,若该类继续了某个类则会默认集成父类的构造函数。 构造函数在实例化类时执行内部,O
- 如何使用必应地图 WPF 控件框架使用.NET40;Visual Studio 2019;Bing Maps WPF 控件需要&n
- 本文实例为大家分享了java生成登录随机验证码的具体代码,供大家参考,具体内容如下验证码工具类: VerifyUtil.javaimport
- 背景:用习惯了idea再去用eclipse实在用的不习惯,于是将老的eclipse项目导入到eclipse,网上有很多教程,看了很多博客都不
- 概述现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。J
- 我们知道hibernate的核心就是对数据库的操作,里面的核心接口就是org.hibernate.Session接口。要想对数据库操作我们就
- 1. 通过设置采样率压缩res资源图片压缩 decodeResource public Bitmap decodeSampled
- 本文实例为大家分享了Android多媒体之画画板开发的具体代码,供大家参考,具体内容如下先看看效果:其实画画板的原理很简单,就是首先记录下按
- 前 言终于来到下篇了,通过上篇,和中篇,我们了解了linq的基本语句,对应linq我们又了解到lambda表达式,静态扩展方法,以及linq
- 前言大家在初学java的时候,大部分的代码都是在控制台上运行的.可能大家辛辛苦苦写了几十行代码,最终就只是在控制台输出一个字符,这个时候,心
- 方式1:1. 明确 Spark中Job 与 Streaming中 Job 的区别1.1 Spark Core一个 RDD DAG Graph
- 一、选择结构大纲if单选择结构if双选择结构if多选择结构嵌套的if结构switch多选择结构二、if单选择结构我们很多时候需要去判断一个东
- 本文较为详细的分析了C#读取二进制文件方法。分享给大家供大家参考。具体分析如下:当想到所有文件都转换为 XML时,确实是一件好事。但是,这并