c#枚举操作
2021-03-08 19:30
标签:bsp 万全 简写 安全性 blog 打印 turn href item 首先先定义个枚举,后续都会用到这个枚举。 我们通常将枚举转换整数,可以将枚举先转化未object类型然后再转为整数类型。 那这段代码是不是看起来没有问题了呢。 当然还是有些问题的,如果我传入的枚举的值大于int的最大值,那我这个方法就会报错。 所以万全之策就是用decimal,int是32位,decimal是128位,就算是我这个枚举类型是long(64位)类型的我这个方法用起来也是没问题的。 还有一种方法是使用Enum.GetUnderlyingType方法获取枚举的整数类型。 用Enum.GetUnderlyingType方法能过获取到枚举的整数类型,然后通过动态转换。这样也能得到枚举的数值。 上述两种方法我个人是用的比较多的,然后还有一种方法在我另一篇博客(https://www.cnblogs.com/aqgy12138/p/12679492.html)里面讲枚举字符串格式化时候是提到的。 在枚举ToString的时候指定格式字符串d或D都能将字符串转成对应的整数字符串。 这个就很简单了。 使用Eunm.ToObject转换。这个ToObject的重载方法可以接受几乎所有的整数类型,以及object(后者支持任何装箱后的整数类型)。 var bs = Enum.ToObject(typeof(BorderSides),5); 这个可以简写为: var bs = (BorderSides)5; 这种简写,是使用的比较多的。 这个就跟基本值类型一样的使用Parse方法就好了。 这方法会打印出Left、Right、Top、Bootom 枚举的语义很大程度上都是由编译器决定的。在CLR中,枚举实例(未拆箱)与它的实际整数值在运行是没有区别。而且,CLR中定义的枚举仅仅是System.Enum的子类型,而每一个成员则是其静态整数类型字段。这意味着在通常情况下使用枚举是非常高效的,其运行开销和整数常量的开销一致。 而这个方案的缺点在于enum虽然支持静态方式,却不具备强类型安全性。 var result= BorderSides.Left + 1; 上述这段代码不会报错,而且打印的值不是Left而是Right。 在工作的日常开发中,我们想要设置枚举中每个枚举值的中文备注,并且能够拿到自己设置的备注。 通常我们使用Description特性。 在设置特性之后通过反射拿到备注。 传入对应枚举值就能获取中文备注。 c#枚举操作 标签:bsp 万全 简写 安全性 blog 打印 turn href item 原文地址:https://www.cnblogs.com/aqgy12138/p/12773541.html [Flags]
public enum BorderSides
{
Left = 1,
Right = 2,
Top = 4,
Bootom = 8
}
1.将枚举转换为整数
1 static int GetValue(Enum anyEnum)
2 {
3 return (int)(object)anyEnum;
4 }
1 static decimal GetValue(Enum anyEnum)
2 {
3 return Convert.ToDecimal(anyEnum);
4 }
static object GetValue(Enum anyEnum)
{
var type = Enum.GetUnderlyingType(anyEnum.GetType());
return Convert.ChangeType(anyEnum, type);
}
2.整数转枚举
3.字符串转枚举
var leftright = (BorderSides)Enum.Parse(typeof(BorderSides), "Left");
Console.WriteLine(leftright);
4.列举枚举值
//列举枚举值
foreach (var item in Enum.GetValues(typeof(BorderSides)))
{
Console.WriteLine(item);
}
5.枚举的工作方式
Console.WriteLine(result);6.拓展
public enum BorderSides
{
[Description("左")]
Left = 1,
[Description("右")]
Right = 2,
[Description("上")]
Top = 4,
[Description("下")]
Bootom = 8
}
static string GetEnumDescription(Enum anyEnum)
{
var type = anyEnum.GetType();//获取枚举的类型
var name = Enum.GetName(type, anyEnum);//获取枚举值的名字
if (name == null) return null;
var filed = type.GetField(name);//查看枚举类型中是否有这个枚举值
var attribute = Attribute.GetCustomAttribute(filed, typeof(DescriptionAttribute)) as DescriptionAttribute;//获取备注特性
if (attribute == null) return name;
return attribute?.Description;
}
GetEnumDescription(BorderSides.Bootom);//下
上一篇:C# 事件
下一篇:为Delphi配置多套环境