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

 更新时间:2022年08月15日 08:36:03   作者:Darren Ji  
这篇文章介绍了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();
        }
    }

运行报错:

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

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • 关于Unity中RectTransform与transform的区别

    关于Unity中RectTransform与transform的区别

    这篇文章主要介绍了Unity中RectTransform与transform的区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • 利用FlubuCore用C#来写DevOps脚本的方法详解

    利用FlubuCore用C#来写DevOps脚本的方法详解

    这篇文章主要介绍了利用FlubuCore用C#来写DevOps脚本的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • C# 字符串的连接(实例讲解)

    C# 字符串的连接(实例讲解)

    下面小编就为大家分享一篇C# 字符串的连接实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • C# Ini文件操作实例

    C# Ini文件操作实例

    这篇文章主要介绍了C# Ini文件操作实例,需要的朋友可以参考下
    2014-02-02
  • WPF利用ValueConverter实现值转换器

    WPF利用ValueConverter实现值转换器

    值转换器在WPF开发中是非常常见的,值转换器可以帮助我们很轻松地实现,界面数据展示的问题。本文将通过WPF ValueConverter实现简单的值转换器,希望对大家有所帮助
    2023-03-03
  • C#页面之间跳转功能的小结

    C#页面之间跳转功能的小结

    在两个ASP.NET页面之间传递值
    2013-03-03
  • C# Winform程序实现防止多开的方法总结【亲测】

    C# Winform程序实现防止多开的方法总结【亲测】

    这篇文章主要介绍了C# Winform程序实现防止多开的方法,结合实例形式总结分析了C# Winform防止多开相关操作技巧与使用注意事项,需要的朋友可以参考下
    2020-03-03
  • C#实现PDF合并的项目实践

    C#实现PDF合并的项目实践

    有时我们可能会遇到需要的资料或教程被分成了几部分存放在多个PDF文件中,本文主要介绍了C#实现PDF合并的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • C#自定义特性(Attribute)详解

    C#自定义特性(Attribute)详解

    本文详细讲解了C#的自定义特性(Attribute),文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#语法相比其它语言比较独特的地方(二)

    C#语法相比其它语言比较独特的地方(二)

    这篇文章主要介绍了C#语法相比其它语言比较独特的地方(二),本文讲解了internal与protected、private、enum、string的==、传引用等内容,需要的朋友可以参考下
    2015-04-04

最新评论