随心所欲操作Enum枚举类型

简单的写了一个操作Enum枚举类型的Helper,实现如下功能:
1、由Int值可以得到Enum对象值
2、由String值可以得到Enum对象值
3、由Hex值可以得到Enum对象值
4、Hex、ASCII值<-得到->Enum对象值


至于其应用,首先是方便写程序的时候对其进行操作;其次是用在自定义协议上,简化协议字符,但是写程序时却可以清晰的知道每个ASCII代表的Enum是什么意思;可以用在UDP传输协议上,压缩传输字符串。

using System;

 

namespace HxH.Collections

{

     public enum ExampleNormalEnum

     {

         Online   = 1,          //   1     i n DB

         Offline  = 2,          //   2     i n DB

         Hide = 3,          //   3     i n DB

         Busy = 4,          //   4     i n DB

         Away = 5,          //   5     i n DB

         Other    = 6,          //   6     i n DB

     }

 

     public enum ExampleHexEnum

     {

         Login                  = 0x22,       //登陆服务器  ASCII = "

         LogOff                 = 0x23,       //退出服务器  ASCII = #

         Online                 = 0x24,       //在线             ASCII = $

         Offline                = 0x25,       //下线             ASCII = %

         Away                   = 0x26,       //离开             ASCII = &

         Busy                   = 0x27,       //          ASCII = '

         Hide                   = 0x28,       //隐身             ASCII = (

     }

 

     /// <summary>

     /// EnumHelper 的摘要说明。

     /// </summary>

     public class EnumHelper

     {

         public EnumHelper()

         {

         }

 

         /// <summary>

         /// Enum中任意取一个Int值,将其转化成枚举类型值

         /// </summary>

         /// <param name="protocolType"></param>

         /// <param name="enumValue"></param>

         /// <returns></returns>

         /// <example>ExampleNormalEnum status = (ExampleNormalEnum)EnumHelper.IntValueToEnum( typeof( ExampleNormalEnum ),1); 得到值为 ExampleNormalEnum.Online </example>

         public static object IntValueToEnum( System.Type protocolType,int enumIntValue)

         {

              object myObject = Enum.Parse( protocolType,Enum.GetName( protocolType, enumIntValue ));

              return myObject;

         }

 

         /// <summary>

         /// Enum中任意取一个String值,将其转化成枚举类型值

         /// </summary>

         /// <param name="protocolType"></param>

         /// <param name="enumStringValue"></param>

         /// <returns></returns>

         /// <example>ExampleNormalEnum status = (ExampleNormalEnum)EnumHelper.StringValueToEnum( typeof( ExampleNormalEnum ),"Offline");得到值为 ExampleNormalEnum.Offline</example>

         public static object StringValueToEnum( System.Type protocolType,string enumStringValue)

         {

              object myObject = Enum.Parse( protocolType,enumStringValue,true);

              return myObject;

         }

 

         /// <summary>

         /// 得到一个Enum中的所有Int

         /// </summary>

         /// <param name="protocolType"></param>

         /// <returns></returns>

         public static int[] GetEnumIntValues( System.Type protocolType )

         {

              int[] myIntArray = new int[ Enum.GetValues( protocolType ).Length ];

              Array.Copy( Enum.GetValues( protocolType ),myIntArray,Enum.GetValues( protocolType ).Length );

              return myIntArray;

         }

 

         /// <summary>

         /// 静态方法,根据枚举类型返回ASCII的字符串值

         /// </summary>

         /// <param name="protocolType">枚举类型</param>

         /// <param name="objectValue">枚举值</param>

         /// <returns>ASCII字符串值</returns>

         /// <example>EnumHelper.EnumValueToASCIIString( typeof( ExampleHexEnum ),ExampleHexEnum.Hide );得到的值为"("</example>

         public static string EnumValueToASCIIString( System.Type protocolType ,object objectValue)

         {

              return HexStringToASCIIString( EnumValueToHexString( protocolType,objectValue ) );

         }

 

         /// <summary>

         /// 输入16进制的字符串,返回翻译成ASCII的字符串

         /// </summary>

         /// <param name="hexString"></param>

         /// <returns></returns>

         /// <example>EnumHelper.HexStringToASCIIString( " 2A " ); 得到值为"*",注意去掉16进制前置标志符号"0x"</example>

         public static string HexStringToASCIIString(string hexString)

         {

              int myInt16 = int.Parse( hexString,System.Globalization.NumberStyles.AllowHexSpecifier);

              char myChar = (char)myInt16;

              return myChar.ToString();

         }

 

         /// <summary>

         /// 静态方法,根据枚举类型返回16进制的字符串值

         /// </summary>

         /// <param name="protocolType"></param>

         /// <param name="objectValue"></param>

         /// <returns></returns>

         /// <example>EnumHelper.EnumValueToHexString(typeof( ExampleHexEnum ),ExampleHexEnum.Hide);得到值"00000028"</example>

         public static string EnumValueToHexString( System.Type protocolType,object objectValue)

         {

              return Enum.Format( protocolType,

                   Enum.Parse( protocolType,

                   Enum.GetName( protocolType,objectValue ) ),"X" );

         }

 

 

         /// <summary>

         /// ASCII字符串转换成 Enum 的值

         /// </summary>

         /// <param name="protocolType"></param>

         /// <param name="asciiString"></param>

         /// <returns></returns>

         /// <example> EnumHelper.ASCIIStringToEnumValue( typeof( ExampleHexEnum ),"(") 得到值 "ExampleHexEnum.Hide" </example>

         public static object ASCIIStringToEnumValue( System.Type protocolType,string asciiString)

         {

              return HexStringToEnumValue( protocolType, ASCIIStringToHexString( asciiString ));

         }

 

         /// <summary>

         /// 输入ASCII的字符串,翻译成16进制的字符串

         /// </summary>

         /// <param name="normalString"></param>

         /// <returns></returns>

         /// <example>EnumHelper.ASCIIStringToHexString( "(" ); 得到值"28"</example>

         public static string ASCIIStringToHexString(string normalString)

         {

              System.Text.Encoding enc = System.Text.Encoding.GetEncoding("ASCII");

 

              for( int i=0;i<normalString.Length;++i)

              {

                   byte[] bs = enc.GetBytes( normalString[i].ToString() );

                   for( int j=0;j<bs.Length;j++)

                   {

                       return bs[j].ToString("X2");

                   }

              }

 

              return "FF";

         }

        

         /// <summary>

         /// 16进制转换为 Enum 的值

         /// </summary>

         /// <param name="protocolType"></param>

         /// <param name="hexString"></param>

         /// <returns></returns>

         /// <example>EnumHelper.HexStringToEnumValue( typeof( ExampleHexEnum ),"28");得到值 "ExampleHexEnum.Hide"</example>

         public static object HexStringToEnumValue( System.Type protocolType,string hexString )

         {

              object myObject = Enum.Parse( protocolType,

                   Enum.GetName( protocolType ,

                   Int16.Parse( hexString ,System.Globalization.NumberStyles.AllowHexSpecifier) ) );

 

              return myObject;

         }

     }

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
/** 1. 功能:枚举操作类,枚举类型创建,转换 * 2. 作者:杨磊 * 3. 创建日期:2008-1-30 * 4. 最后修改日期:2008-11-10 **/ using System; using System.Collections.Generic; using System.Text; using System.Collections; /// /// 枚举操作类,枚举类型创建,转换 /// public class EnumHelper { #region 通过字符串获取枚举成员实例 /// /// 通过字符串获取枚举成员实例 /// /// 枚举名,比如Enum1 /// 枚举成员的常量名或常量值, /// 范例:Enum1枚举有两个成员A=0,B=1,则传入"A"或"0"获取 Enum1.A 枚举类型 public static T GetInstance(string member) { return CommFun.ConvertTo(Enum.Parse(typeof(T), member, true)); } #endregion #region 获取枚举成员名称和成员值的键值对集合 /// /// 获取枚举成员名称和成员值的键值对集合 /// /// 枚举名,比如Enum1 public static Hashtable GetMemberKeyValue() { //创建哈希表 Hashtable ht = new Hashtable(); //获取枚举所有成员名称 string[] memberNames = GetMemberNames(); //遍历枚举成员 foreach (string memberName in memberNames) { ht.Add(memberName, GetMemberValue(memberName)); } //返回哈希表 return ht; } #endregion #region 获取枚举所有成员名称 /// /// 获取枚举所有成员名称 /// /// 枚举名,比如Enum1 public static string[] GetMemberNames() { return Enum.GetNames(typeof(T)); } #endregion #region 获取枚举成员的名称 /// /// 获取枚举成员的名称 /// /// 枚举名,比如Enum1 /// 枚举成员实例或成员值, /// 范例:Enum1枚举有两个成员A=0,B=1,则传入Enum1.A或0,获取成员名称"A" public static string GetMemberName(object member) { //转成基础类型的成员值 Type underlyingType = GetUnderlyingType(typeof(T)); object memberValue = CommFun.ConvertTo(member,underlyingType); //获取枚举成员的名称 return Enum.GetName(typeof(T), memberValue); } #endregion #re

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值