C#将枚举从一个对象复制到另一个对象

AJM*_*AJM 5 c# enums

我有两个非常相似但不完全相同的C#对象.我正在将值从一个类复制到另一个类.

每个类都有一些公开枚举类型的属性.枚举的内部是相同的,但名称是不同的,例如

public enum EnumA
{
 A,
 B
} 

public EnumA EnumAProperty
{
 get{ return enumA;}
}

public enum EnumB
{
 A,
 B
} 

public EnumB EnumBProperty
{
 get{ return enumB;}
}
Run Code Online (Sandbox Code Playgroud)

我想将从EnumBProperty返回的值分配给EnumAProperty这可能吗?

Pau*_*ane 4

您可以通过强制转换来完成,但我不会推荐它,因为它很脆弱 \xe2\x80\x94 如果任何枚举成员被重新排序或添加新项目,结果可能不是您所期望的。

\n\n
EnumAProperty = (EnumA) EnumBProperty;\n
Run Code Online (Sandbox Code Playgroud)\n\n

更糟糕的是,如果源枚举中有项目,而目标 \xe2\x80\x94 中没有对应的项目,那么下面的颜色比形状多:

\n\n
enum Color { Red = 0, Yellow = 1, Blue = 2 };\nenum Shape ( Square = 0, Triangle = 1 };\n\nColor color = Color.Red;\nShape shape = (Shape) color;\n
Run Code Online (Sandbox Code Playgroud)\n\n

shape2即使该值未定义,也可能最终得到该值。

\n\n

相反,我建议您使用switch语句来映射:

\n\n
EnumAProperty = ConvertToA(EnumBProperty);\n\n...\n\nprivate static EnumA ConvertToA(EnumBProperty b)\n{\n    switch (b)\n    {\n        case EnumB.Flannel: return EnumA.HandTowel;\n        case EnemB.Vest: return EnumA.UnderShirt;\n        ...\n        default: throw new ArgumentOutOfRangeException("b");\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n