3

我有一个类,它TState在其构造函数中采用一个泛型类,在TState可以转换为UInt64使用 a的条件下TypeConverter。然后它将用作标志。

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

[Flags]  
public enum EState : ulong
{
    None = 0x0,
    State1= 0x1,
    State2= 0x2,
    State3= 0x4
}

那么如果TypeConverter typeConv = TypeDescriptor.GetConverter(typeof(EState)); typeConv.CanConvertTo(typeof(UInt64))是假的。

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

4

1 回答 1

2

您可以使用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不工作?

根据文档:

此方法通过查找 TypeConverterAttribute 来查找适当的类型转换器。如果找不到 TypeConverterAttribute,它会遍历类的基类层次结构,直到找到原始类型。

TypeDescriptor 和 TypeConvertor 与 一起使用,ExpandableObjectConverterConvertIConvertible.

于 2011-05-10T12:24:28.930 回答