在C#中将一个标志枚举转换为另一个标志Enum

本文关键字:标志 枚举 转换 Enum 另一个 一个 | 更新日期: 2023-09-27 18:29:44

我有两个Flag枚举,看起来像下面的

[Flags]
public enum EnumTypeOne: ulong
{
    NONE                    = 0,
    STUFF_ONE               = ( 1 << 0 ),
    STUFF_TWO               = ( 1 << 1 )
}
[Flags]
public enum EnumTypeTwo: ulong
{
    NONE                    = 0,
    STUFF_ONE               = ( 1 << 0 ),
    STUFF_TWO               = ( 1 << 1 )
}

一个枚举在一个类库中(仅限内部使用),另一个将作为dll提供。

在内部,我想在这两个枚举之间进行编组,因为它们是相同的。我知道如何使用常规枚举来实现这一点,但是如果在其中一个枚举上设置了多个标志,那么它似乎就不起作用了。

我已经尝试使用以下解决方案

var enumResult = (EnumTypeOne)Enum.Parse(typeof(EnumTypeOne), Enum.GetName(typeof(EnumTypeTwo), mEnumTypeTwo);

如上所述,只有当只有一个标志在使用时,这才有效,使用多个标志会导致失败。

有没有一个解决方案可以让我有效地在两个枚举之间转换?

在C#中将一个标志枚举转换为另一个标志Enum

只投射

EnumTypeOne a = EnumTypeOne.STUFF_ONE|EnumTypeOne.STUFF_TWO;
EnumTypeTwo b = (EnumTypeTwo)a;