C# 杂项一一Enum枚举转换

有时候,我们需要针对枚举与字符之间做相应转换,这个时候我们可以通过反射获取Enum对应的字段属性进行转换

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace ConsoleApp1
{
    //枚举类型转换
    public static class EnumConvert
    {
        //int -> enum
        public static T EnumFromInt<T>(int Val)
        {
            T Ret = default(T);
            try
            {
                Ret = (T)Enum.ToObject(typeof(T), Val);
            }
            catch (System.Exception)
            {
                return default(T);
            }
            return Ret;
        }

        //string -> enum
        public static T EnumFromString<T>(string Val)
        {
            T Ret = default(T);
            try
            {
                Ret = (T)Enum.Parse(typeof(T), Val);
            }
            catch (System.Exception)
            {
                return default(T);
            }
            return Ret;
        }

        // enum -> int 直接隐式转换(int)Enum

        // enum -> string 
        public static string EnumToString<T>(T Val)
        {
            return Enum.GetName(typeof(T), Val);
        }
        // enum -> string 
        public static string EnumToString<T>(this System.Enum en, T Val)
        {
            return Enum.GetName(typeof(T), Val);
        }

        //Enum项目中增加[Description("描述")],使用此函数获取此值
        public static string GetEnumDescription(System.Enum value)
        {
            string output = null;
            System.Type type = value.GetType();
            System.Reflection.FieldInfo fi = type.GetField(value.ToString());
            DescriptionAttribute[] attrs = fi.GetCustomAttributes(typeof(DescriptionAttribute), false) as DescriptionAttribute[];
            if (attrs.Length > 0)
            {
                output = attrs[0].Description;
            }
            return output;
        }
    }
}

程序测试:

class Program
{
	static void Main(string[] args)
	{
		string place = EnumConvert.GetEnumDescription(ePlace.GZ);
		Console.WriteLine("place={0}", place);

		ePlace ep = EnumConvert.EnumFromInt<ePlace>(2);
		Console.WriteLine("ep={0}", ep.ToString());

		string p = EnumConvert.EnumToString<ePlace>(ePlace.GZ);
		Console.WriteLine("p={0}", p);
	}
}

public enum ePlace
{
	[Description("Beijing")]
	BJ,
	[Description("Shanghai")]
	SH,
	[Description("Guangzhou")]
	GZ,
	[Description("Shenzhen")]
	SZ,
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值