如何使用 TypeConverter 将标志枚举转换为 UInt64

发布于 2024-11-06 04:27:11 字数 515 浏览 2 评论 0原文

我有一个类,它在其构造函数中采用通用类 TState ,条件是 TState 可以使用 UInt64 转换为 UInt64 >类型转换器。然后它将被用作标志。

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

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

if TypeConverter typeConv = TypeDescriptor.GetConverter(typeof(EState)) ; typeConv.CanConvertTo(typeof(UInt64))为 false。

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

I have a class which takes a generic class TState in its constructor, under the condition that TState can be converted to a UInt64using a TypeConverter. It will then be used as flags.

I want to use a [Flags] enum for TState, but even if I define it as

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

then if TypeConverter typeConv = TypeDescriptor.GetConverter(typeof(EState)); typeConv.CanConvertTo(typeof(UInt64))is false.

How can I make an enum which will convert appropriately? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅语花开 2024-11-13 04:27:11

您可以使用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 配合使用。

You can use Convert.ChangeType():

[Flags]
private enum MyEnum1 : ulong 
{
   A =1,
   B = 2
}

And then

MyEnum1 enum1 = MyEnum1.A | MyEnum1.B;
ulong changeType = (ulong) Convert.ChangeType(enum1, typeof (ulong));

UPDATE

Why TypeDescriptor does not work?

According to docs:

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 and TypeConvertor work with ExpandableObjectConverter while Convert works with IConvertible.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文