我有两个非常相似但不完全相同的C#对象。我正在将值从一个类复制到另一个类。
每个类都有一些公开枚举类型的属性。枚举的内部是相同的,但名称是不同的,例如。
public enum EnumA
{
A,
B
}
public EnumA EnumAProperty
{
get{ return enumA;}
}
public enum EnumB
{
A,
B
}
public EnumB EnumBProperty
{
get{ return enumB;}
}
我想将从EnumBProperty返回的值分配给EnumAProperty这可能吗?
答案 0 :(得分:4)
每个enum
成员都有一个对应的整数值
默认情况下,这些值按升序分配,从0
开始。
如果枚举中的项目顺序(以及它们的数值)相同,您只需将数值转换为EnumB
即可获得具有相同值的EnumB
成员:
EnumBProperty = (EnumB)(int)EnumAProperty;
如果没有,您需要重新解析它:
EnumBProperty = (EnumB)Enum.Parse(typeof(EnumB), EnumAProperty.ToString());
答案 1 :(得分:4)
你可以通过施法来做但我不推荐它,因为它很脆弱 - 如果任何枚举成员被重新排序或添加了新项目,结果可能不是你所期望的。
EnumAProperty = (EnumA) EnumBProperty;
更糟糕的是,如果您的源枚举中有项目,而目标中没有等效项,那么下面会有更多颜色而不是形状:
enum Color { Red = 0, Yellow = 1, Blue = 2 };
enum Shape ( Square = 0, Triangle = 1 };
Color color = Color.Red;
Shape shape = (Shape) color;
即使未定义此值, shape
也可能以值2
结束。
相反,我建议您使用switch
语句进行映射:
EnumAProperty = ConvertToA(EnumBProperty);
...
private static EnumA ConvertToA(EnumBProperty b)
{
switch (b)
{
case EnumB.Flannel: return EnumA.HandTowel;
case EnemB.Vest: return EnumA.UnderShirt;
...
default: throw new ArgumentOutOfRangeException("b");
}
}
答案 2 :(得分:1)
只要两种不同类型的枚举你都不能直接分配它。 您可以为项定义整数偏移量,以便可以通过整数值
指定值public enum EnumA
{
A = 0,
B = 1
}
public enum EnumB
{
A = 0,
B = 1
}
EnumBPropertry = (int)EnumAProperty
答案 3 :(得分:0)
您可以将其转换为整数或将其转换为字符串,然后对其执行Enum.Parse。
答案 4 :(得分:0)
尝试以下方法:
EnumAProperty = (EnumA)Enum.Parse(typeof(EnumA), EnumBProperty.ToString);
答案 5 :(得分:0)
EnumBProperty = (EnumB)Enum.Parse(typeof(EnumB), EnumAProperty.ToString());