我有两个非常相似但不完全相同的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这可能吗?
您可以通过强制转换来完成,但我不会推荐它,因为它很脆弱 \xe2\x80\x94 如果任何枚举成员被重新排序或添加新项目,结果可能不是您所期望的。
\n\nEnumAProperty = (EnumA) EnumBProperty;\nRun Code Online (Sandbox Code Playgroud)\n\n更糟糕的是,如果源枚举中有项目,而目标 \xe2\x80\x94 中没有对应的项目,那么下面的颜色比形状多:
\n\nenum Color { Red = 0, Yellow = 1, Blue = 2 };\nenum Shape ( Square = 0, Triangle = 1 };\n\nColor color = Color.Red;\nShape shape = (Shape) color;\nRun Code Online (Sandbox Code Playgroud)\n\nshape2即使该值未定义,也可能最终得到该值。
相反,我建议您使用switch语句来映射:
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}\nRun Code Online (Sandbox Code Playgroud)\n