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

Shaine ·
更新时间:2024-09-20
· 734 次阅读

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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号