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

时间:2011-08-11 15:08:27

标签: 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;}
}

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

6 个答案:

答案 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());