C#中Enum,Int,String的互相转换

前言:本博文主要对Enum知识,作一些补充,主要是类型转换这块。更多知识,请查看本人另一篇博文:C# 枚举(Enum)精讲

一、Enum介绍

Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型。如果没有显式声明基础类型,则使用 Int32。编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举。

注意:枚举类型的基类型是除 Char 外的任何整型,所以枚举类型的值是整型值。

二、声明一个Enum类型

// 声明一个枚举,表示性别,里面有两个值
// Pascal命名规则
enum Sex
{
    male, // 男
    Female, // 女
    // 最后一个, 可有可无
}

三、Enum,Int,String相互转换

1、Enum转String或String[]

  1. 利用Object.ToString()方法。
Sex sex1 = Sex.male;
string strSex = sex1.ToString();
Console.WriteLine(strSex);
// 判断是否转换成功
Console.WriteLine(strSex is String);

在这里插入图片描述

  1. 利用Enum的静态方法GetName与GetNames。
string strSex = Enum.GetName(typeof(Sex),Sex.male);
Console.WriteLine(strSex);
Console.WriteLine(strSex is String);

在这里插入图片描述

string[] strSex = Enum.GetNames(typeof(Sex));
Console.WriteLine(strSex);
Console.WriteLine(strSex is String[]);

在这里插入图片描述
2、String转Enum

  • 利用Enum的静态方法Parse。
string str = "Female";
Sex sex = (Sex)Enum.Parse(typeof(Sex), str);
Console.WriteLine(sex);
Console.WriteLine(sex is Enum);

在这里插入图片描述
3、Enum转Int

  • 因为枚举的基类型是除 Char 外的整型,所以可以进行强制转换。
int num = (int)Sex.Female;
Console.WriteLine(num);
Console.WriteLine(num is Int32);

在这里插入图片描述
4、Int转Enum

  1. 可以强制转换将整型转换成枚举类型。
Sex sex = (Sex)1;
Console.WriteLine(sex);
Console.WriteLine(sex is Enum);

在这里插入图片描述

  1. 利用Enum的静态方法ToObject。
Sex sex = (Sex)Enum.ToObject(typeof(Sex), 0);
Console.WriteLine(sex);
Console.WriteLine(sex is Enum);

在这里插入图片描述

四、判断某个整型是否定义在枚举中

Enum.IsDefined

Console.WriteLine(Enum.IsDefined(typeof(Sex), 0));
Console.WriteLine(Enum.IsDefined(typeof(Sex), "Female"));

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#,可以使用枚举类型来定义一组具有固定值的常量。针对枚举类型数字与字符串的对换,可以使用以下两种方法: 1. 使用Enum.Parse()和Enum.ToString()方法 这种方法可以将枚举类型的数字转换为字符串,或将字符串转换为枚举类型的数字。示例代码如下: ```csharp enum Colors { Red = 1, Green = 2, Blue = 3 } // 将数字转换为字符串 int colorNumber = 2; string colorString = Enum.GetName(typeof(Colors), colorNumber); // "Green" // 将字符串转换为数字 string colorString = "Blue"; Colors colorNumber = (Colors)Enum.Parse(typeof(Colors), colorString); // Colors.Blue ``` 2. 使用Description属性和反射机制 这种方法需要使用System.ComponentModel命名空间的Description特性,以及反射机制获取枚举类型的Description属性值。示例代码如下: ```csharp using System.ComponentModel; using System.Reflection; enum Colors { [Description("红色")] Red = 1, [Description("绿色")] Green = 2, [Description("蓝色")] Blue = 3 } // 将数字转换为字符串 int colorNumber = 2; Colors color = (Colors)colorNumber; string colorString = color.GetType() .GetMember(color.ToString()) .FirstOrDefault() ?.GetCustomAttribute<DescriptionAttribute>() ?.Description; // "绿色" // 将字符串转换为数字 string colorString = "蓝色"; Colors colorNumber = Enum.GetValues(typeof(Colors)) .Cast<Colors>() .FirstOrDefault(c => c.GetType() .GetMember(c.ToString()) .FirstOrDefault() ?.GetCustomAttribute<DescriptionAttribute>() ?.Description == colorString); // Colors.Blue ``` 注意:第二种方法需要在枚举类型为每个常量定义Description特性,并且Description特性的值应与对应的字符串相同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值