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

C# 如何在C中创建一个可以转换为枚举的新数值类型#,c#,enums,interface,casting,C#,Enums,Interface,Casting,我正试图用C#编写一个侏儒解析器。DWARF具有多个数字类型的概念(DW\u FORM\u data2,DW\u FORM\u data4,DW\u FORM\u data8,DW\u FORM\u sdata),它们都可以解析为枚举类型。我想制作一个IConstant,上面提到的DW\u FORM.*类实现了它,您可以将它强制转换为枚举(就像您可以将ushort,int等强制转换为枚举一样) 然而,强制转换运算符是一种静态方法,我不能将其放在枚举上。如何制作一组可以转换为枚举的数字类型?一个复

我正试图用C#编写一个侏儒解析器。DWARF具有多个数字类型的概念(
DW\u FORM\u data2
DW\u FORM\u data4
DW\u FORM\u data8
DW\u FORM\u sdata
),它们都可以解析为枚举类型。我想制作一个
IConstant
,上面提到的
DW\u FORM.*
类实现了它,您可以将它强制转换为枚举(就像您可以将
ushort
int
等强制转换为枚举一样)


然而,强制转换运算符是一种静态方法,我不能将其放在枚举上。如何制作一组可以转换为枚举的数字类型?一个复杂的因素是
DW\u-FORM\u-udata
DW\u-FORM\u-sdata
数字的大小(8位、32位等)直到解码后才定义。

您可以创建一个简单的接口(不确定
IConstant
是否是最佳名称):


在不了解类的详细信息的情况下,如果可能的话,很难说使用一个具有单个实现的抽象类是否会更好。

您是否希望能够强制转换到任何
枚举
?为什么要强制转换,而不只是使用一个方法进行转换?是的。任何枚举。也许有一种方法是可行的。那么只需在接口上添加一个
ToEnum()
方法?这可能就是我想要的答案。你会使
ToEnum
泛型吗?@DavidG一个方法如何转换成任何可用的
enum
,就像你可以将
int
转换成任何
enum
?这是你必须在C语言中做的事情,因为它不能保证内置类型的大小。每个库都必须声明自己的类型别名,这给每个库带来了负担,有成千上万种方式可以说“我使用的是32位无符号类型”。我可能是在低调行事。他们终于闻到了咖啡的味道,加上了stdint.h,对侏儒来说太晚了。在C#中不是问题,UInt32总是无符号的,并且总是需要4个字节。这与接口无关。在我的例子中,这非常有效。谢谢特别是因为不同的“常量”类型将转换为不同的C#numeric类型。侏儒把它们都归为“常量”类——这就是为什么我这么叫它们。
public interface IConstant {
    TEnum ToEnum<TEnum>();
}
public TEnum ToEnum<TEnum>() {
    return (TEnum)Enum.ToObject(typeof(TEnum), Value);
}
var ev = data8.ToEnum<TestEnum>();