2014-11-07 5 views
2

У меня есть два флага перечислений, которые выглядят что-то вроде следующегоПреобразование флаг Enum в другой флаг Enum в C#

[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) 
} 

Один перечисление находится внутри одной библиотеки классов (только для внутреннего использования), а другой будет поставляться в качестве длл.

Внутренне я хотел бы маршаллировать между этими двумя перечислениями, так как они идентичны. Я знаю, как это сделать с регулярным перечислением, но он не работает, если на одном из перечислений задано более одного флага.

Я попытался использовать следующее решение

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

Как было указано выше, это работает только, если только один флаг в использовании, использование нескольких флагов вызывает его к падению.

Есть ли решение, позволяющее эффективно конвертировать между двумя перечислениями?

ответ

11

просто брось

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

Спасибо, не думаю, что это будет так просто! –

+2

@const_ref: перечисления - это просто целые числа внизу, поэтому, если значения означают одно и то же, безопасно просто конвертировать между ними как есть. – siride

+0

@siride Я понял, что это был улунг под капюшоном, но мне было трудно в прошлом при преобразовании перечислений в перечисления и действительно не думал, что это будет так просто. ура –

Смежные вопросы