博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小心 Enum Parse 中的坑
阅读量:4036 次
发布时间:2019-05-24

本文共 1115 字,大约阅读时间需要 3 分钟。

小心 Enum Parse 中的坑

Intro

最近使用枚举的时候,踩了一个小坑,分享一下,主要是枚举从 int 值转成枚举时可能会遇到

Sample

来看下面的示例:

首先定义一个枚举:

public enum Color : byte{    Red = 0,    Green = 1,    Blue = 2,}

来看一下下面的代码,下面的代码会抛异常吗?

Console.WriteLine(((Color)10).ToString());

再来看下面的代码,下面的代码又会怎么样呢,输出结果是什么?

var intValue = int.MaxValue;Console.WriteLine(((Color)intValue).ToString());

输出结果如下:

从上面的结果看得出来,从 int 值直接做转换的时候,结果可能并不是期望的,不会抛异常,那么又该如何处理呢?我们再来看一个示例

ParseSample

EnumParse 方法不仅支持从 Name 的字符串比如前面定义的枚举中的 Red/Green,还可以支持从 int 的字符串也就是 0/1/2 ,来看下面的示例:

if (Enum.TryParse("10", out Color color)){    Console.WriteLine(color.ToString());}if (Enum.TryParse("10", out Color color1)    && Enum.IsDefined(typeof(Color), color1)){    Console.WriteLine($"Success, {color1}");}else{    Console.WriteLine("Can not match");}

来直接看输出结果吧:

Parse from name

再来看一个从 Name 转换的一个示例:

if (Enum.TryParse("Yellow", out Color color2)){    Console.WriteLine(color2.ToString());}

这个不会有任何输出,TryParse 会直接返回 false

More

当枚举从 int 值转换的时候,需要小心,即使 int 值在枚举中没有定义也会转换成功,如果要确保枚举中定义了对应的值时,应该使用 IsDefined 来确保枚举定义了对应的值

Reference

  • https://docs.microsoft.com/en-us/dotnet/api/system.enum.tryparse?view=net-5.0

转载地址:http://qsudi.baihongyu.com/

你可能感兴趣的文章
VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
查看>>
VUE-Vue.js之$refs,父组件访问、修改子组件中 的数据
查看>>
Vue-子组件改变父级组件的信息
查看>>
Python自动化之pytest常用插件
查看>>
Python自动化之pytest框架使用详解
查看>>
【正则表达式】以个人的理解帮助大家认识正则表达式
查看>>
性能调优之iostat命令详解
查看>>
性能调优之iftop命令详解
查看>>
非关系型数据库(nosql)介绍
查看>>
移动端自动化测试-Windows-Android-Appium环境搭建
查看>>
Xpath使用方法
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>
Selenium之前世今生
查看>>
Selenium-WebDriverApi接口详解
查看>>
Selenium-ActionChains Api接口详解
查看>>
Selenium-Switch与SelectApi接口详解
查看>>
Selenium-Css Selector使用方法
查看>>
Linux常用统计命令之wc
查看>>
测试必会之 Linux 三剑客之 sed
查看>>
Socket请求XML客户端程序
查看>>