【问题标题】:How to get a flags enum to convert to UInt64 with a TypeConverter如何使用 TypeConverter 获取标志枚举以转换为 UInt64
【发布时间】:2011-08-22 10:21:30
【问题描述】:

我有一个类在其构造函数中采用泛型类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))为假。

我怎样才能制作一个可以适当转换的枚举?谢谢!

【问题讨论】:

  • 如何定义where子句中必须转换为UInt64的条件?
  • 你不知道 - 这是一个内部类,它只有在条件成立时才有效。
  • 我是这么认为的!我在where 子句中摸不着头脑。查看我的回复。

标签: c# enums type-conversion flags uint64


【解决方案1】:

你可以使用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,它 遍历基类层次结构 类,直到它找到一个原语 输入。

TypeDescriptor 和 TypeConvertor 与 ExpandableObjectConverter 一起使用,而 ConvertIConvertible 一起使用。

【讨论】:

  • 谢谢,这行得通 :) 碰巧,我可以在必要时更改泛型类的内部,所以这可能是要走的路。但是我还是想知道为什么 TypeConverter 不能转换。
  • 还有ulong changeType2 =(UInt64) Convert.ToInt64(enum1);工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多