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));