如何使用类型转换器获取标志枚举转换为 UInt64

本文关键字:枚举 转换 UInt64 标志 获取 何使用 类型 类型转换 转换器 | 更新日期: 2023-09-27 17:56:02

>我有一个类,它在其构造函数中接受泛型类TState,条件是可以使用TypeConverterTState转换为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))是假的。

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

如何使用类型转换器获取标志枚举转换为 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不起作用?

根据文档:

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

TypeDescriptor 和 TypeConvertor 适用于 ExpandableObjectConverter,而 Convert 适用于 IConvertible