如何创建一个可以在C#中强制转换为枚举的新数字类型

时间:2017-12-19 22:24:01

标签: c# enums interface casting

我试图在C#中编写DWARF解析器。 DWARF具有多种数字类型的概念(DW_FORM_data2DW_FORM_data4DW_FORM_data8DW_FORM_sdataDW_FORM_udata),它们都可以解析为枚举类型。我希望制作一个IConstant,前面提到的DW_FORM_*类实现了你可以强制转换为枚举(正如你可以投射ushortint等。到一个枚举)。

但是,强制转换操作符是一种静态方法,我不能将它放在枚举上。如何制作一组可以转换为枚举的数字类型?一个复杂因素是DW_FORM_udataDW_FORM_sdata数字的大小(8位,32位等)未被定义,直到它被解码。

1 个答案:

答案 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>();

如果不知道类的细节,很难说如果可能的话,你是否会更好地使用带有单个实现的抽象类。