C# 中使用枚举转换时需要注意的坑点及解决方案

news/2024/10/18 0:19:38/

在使用枚举进行转换时,需要注意一些细节,否则可能会出现一些意外情况。本文将介绍一些在枚举转换中需要注意的坑点,并提供一些解决方案。

1、枚举从 int 值转换的坑

在将 int 值转换成枚举类型时,可能会遇到一些问题。即使 int 值在枚举中没有定义,也可以将其成功转换成枚举类型,这可能会导致一些意外情况的发生。例如:

public enum Color : byte
{Red = 0,Green = 1,Blue = 2,
}// 输出 Green,因为 5 被成功转换为了枚举类型 Green
Console.WriteLine(((Color)5).ToString());// 输出 255,因为 int.MaxValue 被成功转换为了枚举类型 255
var intValue = int.MaxValue;
Console.WriteLine(((Color)intValue).ToString());

为了避免这种情况,可以使用 Enum.IsDefined 方法检查转换后的值是否存在于枚举定义的范围内。例如:

 Color color;
if (Enum.IsDefined(typeof(Color), (byte)5))
{color = (Color)(byte)5;Console.WriteLine(color.ToString());
}
else
{Console.WriteLine("Can not match");
}

2、枚举从 Name 转换的坑

string colorName = "Yellow";
Color color = (Color)Enum.Parse(typeof(Color), colorName);
Console.WriteLine(color.ToString());

这样会报错

为了避免这种情况,可以使用 Enum.TryParse 方法进行转换,并使用 Enum.IsDefined 方法确保枚举值存在于 Enum 定义的范围内。例如:

string colorName = "Blue";
Color color;
if (Enum.TryParse<Color>(colorName, true, out color))
{Console.WriteLine($"The value of {nameof(Color)}.{colorName} is {color}.");
}
else
{Console.WriteLine($"The name {colorName} is not a valid member of the {nameof(Color)} enumeration.");
}

在上述代码中,我们首先将字符串名称 “Blue” 存储在 colorName 变量中,然后使用 Enum.TryParse 方法来解析该名称并将其转换为 Color 枚举类型的值。如果解析成功,我们输出解析后的枚举值,否则输出错误信息。注意,我们使用 nameof(Color) 来获取 Color 枚举类型的名称,这可以避免拼写错误和大小写问题。

或者

Color color;
if (Enum.TryParse("Green", true, out color) && Enum.IsDefined(typeof(Color), color))
{Console.WriteLine(color);
}
else
{Console.WriteLine("Can not match");
}

总结

在使用枚举进行转换时,需要注意以下几点:

  • 在将 int 值转换成枚举类型时,需要确保转换后的值存在于枚举定义的范围内,可以使用 Enum.IsDefined 方法进行检查。
  • 在将字符串转换成枚举类型时,需要注意字符串的大小写以及字符串是否与枚举中定义的名称相匹配,可以使用 Enum.TryParse 方法进行转换,并使用 Enum.IsDefined 方法确保枚举值存在于 Enum 定义的范围内。

http://www.ppmy.cn/news/573011.html

相关文章

nginx 前端及接口代理配置

以下为总结配置 我这一块配置为了习惯统一化 不管前端还是接口配置 location后面都带上斜杠。 前端代理配置 我比较常用的为alias方式 # 演示root和alias两种配置静态资源的区别server {listen 80;server_name localhost;# 用root方式&#xff0c;location中的路径会拼加到r…

给COS挂上nginx代理

目录 前言&#xff1a; 解决思路&#xff1a; Nginx代理配置 关键配置讲解&#xff1a; 附录 前言&#xff1a; 最近研发同学反馈本地无法连上线上测试的COS文件服务器。由于安全问题&#xff0c;研发同学连接公司内部服务都是通过自己的VPN&#xff1b;经过排查之后发现…

基于Docker MinIO整合Nginx搭建反向代理

基于Docker MinIO整合Nginx搭建反向代理 docker拉去镜像安装和配置就不说了 主要说一下配置反向代理 第一次使用minio我陷入了一个误区&#xff0c;将nginx的data目录挂载到了minio的文件目录&#xff0c;这样是可以通过nginx访问minio文件&#xff0c;但是没有任何意义&…

某医院nginx 前置机(反向代理)配置

数据流图 外网访问-http://13*.*.*.12*:8087/&#xff08;在出口做dnat&#xff09;----http://10.*.*.230:8087/&#xff08;前置机反向代理到内网&#xff09;----10.1.*.230:8087(内网) 在下配置在 10.*.*.230机器上进行配置&#xff1a; 一、安装nginx软件&#xff0c;目…

使用Nginx搭建反向代理

引言&#xff1a;最近公司有台服务器遭受DDOS攻击&#xff0c;流量在70M以上&#xff0c;由于服务器硬件配置较高所以不需要DDOS硬件防火墙。但我们要知道&#xff0c;IDC机房是肯定不 允许这种流量一直处于这么高的&#xff0c;因为没法具体知道后面陆续攻击的流量会有多大&am…

secureCRT设置跳板机 + proxyfier代理

背景 目前有三台以下机器: 本地windows 服务器1&#xff1a;132.121.11.71 服务器2&#xff1a;132.122.11.75 服务器1 能直接访问 服务器2&#xff1b; 但是本地不能直接访问 服务器2; 现在想让本地能直接访问 服务器2中的数据库。 工具 secureCRTproxyfier 操作 1. 跳板…

【算法题】数组系列(找出数组中重复的数字、二维数组中的查找)

算法题 数组系列 一、找出数组中重复的数字1.1、题目1.2、解题思路1&#xff08;排序法&#xff09;1.3、解题思路2&#xff08;hash&#xff09;1.4、小结 二、二维数组中的查找2.1、题目2.2、理解题目2.3、解题思路2.3.1、暴力枚举2.3.2、二分查找2.3.3、对角线查询&#xff…

想做代理商吗?物联卡的起批价格、张数和注意条例你要弄清楚!

物联网时代&#xff0c;物联卡也成为了一种商机&#xff0c;想做代理商&#xff0c;物联卡的起批张数和注意条例你弄清楚了吗&#xff1f; ​ 首先&#xff0c;我们在介绍做物联卡代理要拿多少张卡之前&#xff0c;请跟小编一块先了解一下&#xff0c;做物联卡代理要满足的条…