C#如何将枚举转换为基于Bin/Oct/Dec/Hex的字符串,反之亦然

C#如何将枚举转换为基于Bin/Oct/Dec/Hex的字符串,反之亦然,c#,generics,enums,converter,C#,Generics,Enums,Converter,我在寻找一种通用方法,将任何类型的枚举表示为基于bin/oct/dec/hex的字符串值 ToType(Byte、SByte、Int16、UInt16等)提供了将基于字符串的字符串转换为所需类型的支持。但是Convert.ToString只支持类型byte(无符号)、short(有符号)、int(有符号)、long(长)。如果您不支付attantion,您将尝试从UInt.Max获取基于bin的字符串: Convert.ToString(UInt.MaxValue,2)但对UInt32没有基本支

我在寻找一种通用方法,将任何类型的枚举表示为基于bin/oct/dec/hex的字符串值

ToType(Byte、SByte、Int16、UInt16等)提供了将基于字符串的字符串转换为所需类型的支持。但是Convert.ToString只支持类型byte(无符号)、short(有符号)、int(有符号)、long(长)。如果您不支付attantion,您将尝试从UInt.Max获取基于bin的字符串:
Convert.ToString(UInt.MaxValue,2)
但对UInt32没有基本支持,因此2被定义为IFormatProvider。 Hex有一个ToString Formatprovider,但它提供的输出与。Convert.ToString(,16)

我会让它很快,没有后续的实现,有符号/无符号的问题,铸造陷阱。使用enum时,您没有enum通用支持。可能的枚举基类型的virieté等


我想要的是将任何枚举表示为基于字符串,并将基于字符串转换回所需的枚举

我已经做了一些努力并为此创建了2个转换器,代码实现的要点如下:

BasedEnumConverter和Helper: 基带值转换器

void Main()
{
var os=Tshort.conversionfailed.ToStringOct().Dump();//000120
BasedEnumConverter.ParseEnumFromOct(os).Dump();//转换失败
var stsbbin=Tsbyte.BAD.ToStringBin().Dump();//10000000
BasedEnumConverter.ParseEnumFromBin(stsbbin.Dump();//错误
var sinthex=Tint.OK.ToStringHex().Dump();//00000080
BasedEnumConverter.ParseEnumFromHex(sinthex).Dump();//确定
}
枚举十:字节{A=0,B=1,OK=128,BAD=255,ConversionFailed=80}
枚举Tbyte:字节{A=0,B=1,OK=128,BAD=255,ConversionFailed=80}
枚举Tsbyte:sbyte{A=0,B=1,OK=127,OK2=126,BAD=-128,BAD2=-127,conversionfailed=80}
enum Tshort:short{A=0,B=1,OK=128,BAD=255,conversionfailed=80}
enum Tushort:ushort{A=0,B=1,OK=128,BAD=255,conversionfailed=80}
枚举着色:int{A=0,B=1,OK=128,BAD=255,conversionfailed=80}
枚举Tuint:uint{A=0,B=1,OK=128,BAD=255,conversionfailed=80}
枚举Tlong:long{A=0,B=1,OK=128,BAD=255,conversionfailed=80}
enum Tulong:ulong{A=0,B=1,OK=128,BAD=255,conversionfailed=80,Min=ulong.MinValue,Max=ulong.MaxValue}
请检查代码,给我一个关于性能/oop的提示,什么是概念上的错误或者可以做得更好。我的第一种方法(或第二种方法是尝试通过一些移位和字符串附加自行计算值,但我讨论了这8种枚举基类型)

Conver.ToString((short)79,16) // 4F
((short)79).ToString("X") // 4f
void Main()
{

    var os = Tshort.Convesionfailed.ToStringOct().Dump();         //000120
    BasedEnumConverter<Tshort>.ParseEnumFromOct(os).Dump();       //Conversionfailed

    var stsbbin = Tsbyte.BAD.ToStringBin().Dump();                //10000000
    BasedEnumConverter<Tsbyte>.ParseEnumFromBin(stsbbin).Dump();  //BAD

    var sinthex = Tint.OK.ToStringHex().Dump();                   //00000080
    BasedEnumConverter<Tint>.ParseEnumFromHex(sinthex).Dump();    //OK

}

enum Tenum : byte { A = 0, B = 1, OK = 128, BAD = 255, Convesionfailed = 80 }
enum Tbyte : byte { A = 0, B = 1, OK = 128, BAD = 255, Convesionfailed = 80 }
enum Tsbyte : sbyte { A = 0, B = 1, OK = 127, OK2 = 126, BAD = -128, BAD2 = -127, Convesionfailed = 80 }
enum Tshort : short { A = 0, B = 1, OK = 128, BAD = 255, Convesionfailed = 80 }
enum Tushort : ushort { A = 0, B = 1, OK = 128, BAD = 255, Convesionfailed = 80 }
enum Tint : int { A = 0, B = 1, OK = 128, BAD = 255, Convesionfailed = 80 }
enum Tuint: uint { A = 0, B = 1, OK = 128, BAD = 255, Convesionfailed = 80 }
enum Tlong : long { A = 0, B = 1, OK = 128, BAD = 255, Convesionfailed = 80 }
enum Tulong : ulong { A = 0, B = 1, OK = 128, BAD = 255, Convesionfailed = 80, Min = ulong.MinValue, Max = ulong.MaxValue}