我有一个类在其构造函数中采用通用类 TState
,条件是 TState
可以转换为 UInt64
使用一个 TypeConverter
。然后它将用作标志。
我想为 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))
为假。
我怎样才能制作一个可以适当转换的枚举?谢谢!
最佳答案
您可以使用Convert.ChangeType()
:
[Flags]
private enum MyEnum1 : ulong
{
A =1,
B = 2
}
然后
MyEnum1 enum1 = MyEnum1.A | MyEnum1.B;
ulong changeType = (ulong) Convert.ChangeType(enum1, typeof (ulong));
更新
为什么 TypeDescriptor
不起作用?
根据文档:
This method looks for the appropriate type converter by looking for a TypeConverterAttribute. If it cannot find a TypeConverterAttribute, it traverses the base class hierarchy of the class until it finds a primitive type.
TypeDescriptor 和 TypeConvertor 与 ExpandableObjectConverter
一起使用,而 Convert
与 IConvertible
一起使用。
关于c# - 如何使用 TypeConverter 获取标志枚举以转换为 UInt64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5949820/