如何创建一个可以在C#中强制转换为枚举的新数字类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建一个可以在C#中强制转换为枚举的新数字类型相关的知识,希望对你有一定的参考价值。
我正在尝试用C#编写DWARF解析器。 DWARF具有多种数值类型的概念(DW_FORM_data2
,DW_FORM_data4
,DW_FORM_data8
,DW_FORM_sdata
,DW_FORM_udata
),它们都可以解析为枚举类型。我喜欢制作一个IConstant
,前面提到的DW_FORM_*
类实现了你可以演绎到枚举(正如你可以将ushort
,int
等演绎到枚举中)。
但是,强制转换操作符是一种静态方法,我不能把它放在枚举上。如何制作一组可以转换为枚举的数字类型?一个复杂的因素是DW_FORM_udata
或DW_FORM_sdata
数的大小(8位,32位等)直到它被解码才被定义。
答案
你可以创建一个简单的界面(不确定IConstant
是最好的名字):
public interface IConstant {
TEnum ToEnum<TEnum>();
}
然后在每个数值类型类中实现它,例如:
public TEnum ToEnum<TEnum>() {
return (TEnum)Enum.ToObject(typeof(TEnum), Value);
}
然后你可以通过在调用中指定enum
类型来调用它:
var ev = data8.ToEnum<TestEnum>();
在不知道类的细节的情况下,很难说如果可能的话,使用单个实现的抽象类是否会更好。
以上是关于如何创建一个可以在C#中强制转换为枚举的新数字类型的主要内容,如果未能解决你的问题,请参考以下文章
C#如何把INT类型转换为方法参数对应的枚举类型?怎么强制转换?