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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何创建一个可以在C#中强制转换为枚举的新数字类型相关的知识,希望对你有一定的参考价值。

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

答案

你可以创建一个简单的界面(不确定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类型转换为方法参数对应的枚举类型?怎么强制转换?

java 如何将String 转换成 枚举

oracle decimal(10,0)类型强制转换sql char(10) 如何转换

如何将string类型的数字转换成int

如何将数字枚举列转换为 tinyint?

在C#中如何将int类型强制转换为double类型