C# 如何使用TypeConverter获取要转换为UInt64的标志枚举

C# 如何使用TypeConverter获取要转换为UInt64的标志枚举,c#,enums,type-conversion,flags,uint64,C#,Enums,Type Conversion,Flags,Uint64,我有一个类,它在构造函数中接受一个泛型类TState,条件是TState可以使用TypeConverter转换为UInt64。然后它将被用作标志 我想为TState使用[Flags]枚举,但即使我将其定义为 [Flags] public enum EState : ulong { None = 0x0, State1= 0x1, State2= 0x2, State3= 0x4 } 然后如果TypeConverter-typeConv=TypeDescrip

我有一个类,它在构造函数中接受一个泛型类
TState
,条件是
TState
可以使用
TypeConverter
转换为
UInt64
。然后它将被用作标志

我想为
TState
使用
[Flags]
枚举,但即使我将其定义为

[Flags]  
public enum EState : ulong
{
    None = 0x0,
    State1= 0x1,
    State2= 0x2,
    State3= 0x4
}
然后如果
TypeConverter-typeConv=TypeDescriptor.GetConverter(typeof(EState))
typeConv.CanConvertTo(typeof(UInt64))
为false


如何制作一个可以适当转换的枚举?谢谢

您可以使用
Convert.ChangeType()

然后

MyEnum1 enum1 = MyEnum1.A | MyEnum1.B;
ulong changeType = (ulong) Convert.ChangeType(enum1, typeof (ulong));

更新 为什么
TypeDescriptor
不起作用

根据文件:

此方法查找适当的 通过查找 类型转换器属性。如果不能 找到一个TypeConverterAttribute,它 遍历的基类层次结构 类,直到找到基元为止 类型


TypeDescriptor和TypeConverter与
ExpandableObjectConverter
一起工作,而
Convert
IConvertible
一起工作,如何在
where
子句中定义必须转换为
UInt64
的条件?您没有-这是一个内部类,而且只有在条件成立的情况下才有效。我想是的!在
where
子句中,我一直在琢磨你是怎么做的。请看我的回答。谢谢,这是有效的:)事实上,如果必要的话,我可以更改泛型类的内部结构,因此这可能是一种方法。但是我仍然想知道为什么TypeConverter不能转换它;作品
MyEnum1 enum1 = MyEnum1.A | MyEnum1.B;
ulong changeType = (ulong) Convert.ChangeType(enum1, typeof (ulong));