C#使用Enum.TryParse()实现枚举安全转换

作者:Darren?Ji 时间:2021-10-27 05:29:06 

在项目中,有时候会用到领域枚举和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();
       }
   }

运行报错:

C#使用Enum.TryParse()实现枚举安全转换

这正是我们预设的报错方式。

来源:https://www.cnblogs.com/darrenji/p/3852737.html

标签:C#,Enum,TryParse,枚举,安全,转换
0
投稿

猜你喜欢

  • C# 实现简易的串口监视上位机功能附源码下载

    2023-10-12 11:12:19
  • Java动态 代理和AOP应用示例

    2023-11-26 07:45:02
  • Spring boot集成Kafka消息中间件代码实例

    2022-11-06 21:53:48
  • spring boot实战之本地jar包引用示例

    2021-11-01 20:44:45
  • Java和C#输入输出流的方法(详解)

    2022-06-24 09:21:02
  • C# 利用代理爬虫网页的实现方法

    2023-02-26 18:51:43
  • 详解C#之委托

    2021-12-12 00:17:49
  • 浅谈单例模式和线程安全问题

    2023-11-25 06:27:34
  • Java进阶之FileUpload完成上传的实例

    2022-03-26 03:39:55
  • List调用toString()方法后,去除两头的中括号实例

    2023-09-28 11:18:56
  • C# 泛型集合类List<T>使用总结

    2021-08-30 02:04:01
  • Java实现多线程断点下载

    2022-04-27 00:29:16
  • C#读写指定编码格式的文本文件

    2023-06-16 03:45:41
  • java10下编译lombok注解代码分享

    2023-06-06 11:02:35
  • Java数据结构之ArrayList从顺序表到实现

    2022-06-14 00:53:25
  • Java的JNI快速入门教程(推荐)

    2022-11-22 16:10:48
  • Java 反射调用静态方法的简单实例

    2021-10-09 06:47:58
  • Android 监听手机GPS打开状态实现代码

    2022-09-28 08:56:38
  • C#如何使用Bogus创建模拟数据示例代码

    2023-10-11 10:57:50
  • Flutter开发之Widget自定义总结

    2021-11-07 12:41:03
  • asp之家 软件编程 m.aspxhome.com