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

问题描述 投票:-1回答:1

我正在尝试用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位等)直到它被解码才被定义。

c# enums interface casting
1个回答
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>();

在不知道类的细节的情况下,很难说如果可能的话,使用单个实现的抽象类是否会更好。

© www.soinside.com 2019 - 2024. All rights reserved.