隨心所欲操作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    in DB

         Offline  = 2,          //   2    in DB

         Hide = 3,          //   3    in DB

         Busy = 4,          //   4    in DB

         Away = 5,          //   5    in DB

         Other    = 6,          //   6    in 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;

         }

     }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章