我试图在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位等)未被定义,直到它被解码。
答案 0 :(得分:0)
您可以创建一个简单的界面(不确定IConstant
是最佳名称):
public interface IConstant {
TEnum ToEnum<TEnum>();
}
然后在每个数字类型类中实现它,例如:
public TEnum ToEnum<TEnum>() {
return (TEnum)Enum.ToObject(typeof(TEnum), Value);
}
然后您可以通过在呼叫中指定enum
类型来调用它:
var ev = data8.ToEnum<TestEnum>();
如果不知道类的细节,很难说如果可能的话,你是否会更好地使用带有单个实现的抽象类。