[英]C# Copying Enumeration from one object to another
我有两个非常相似但不相同的 C# 对象。 我将值从一个 class 复制到另一个。
每个 class 都有一些公开枚举类型的属性。 枚举的内部相同,但名称不同,例如
public enum EnumA
{
A,
B
}
public EnumA EnumAProperty
{
get{ return enumA;}
}
public enum EnumB
{
A,
B
}
public EnumB EnumBProperty
{
get{ return enumB;}
}
我想将从 EnumBProperty 返回的值分配给 EnumAProperty 这可能吗?
每个enum
成员都有一个对应的 integer 值。
默认情况下,这些值按升序分配,从0
开始。
如果枚举中项目的顺序(以及它们的数值)相同,您可以将数值转换为EnumB
以获得具有相同值的EnumB
成员:
EnumBProperty = (EnumB)(int)EnumAProperty;
如果没有,您需要重新解析它:
EnumBProperty = (EnumB)Enum.Parse(typeof(EnumB), EnumAProperty.ToString());
你可以通过强制转换来做,但我不推荐它,因为它很脆弱——如果任何枚举成员被重新排序或添加了新项目,结果可能不是你所期望的。
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
结束。
相反,我建议您对 map 使用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");
}
}
只要两个枚举类型不同,您就不能直接分配它。 您可以为项目定义 integer 偏移量,以便您可以通过 integer 值分配值
public enum EnumA
{
A = 0,
B = 1
}
public enum EnumB
{
A = 0,
B = 1
}
EnumBPropertry = (int)EnumAProperty
您可以将其转换为 integer 或将其转换为字符串,然后对其执行 Enum.Parse。
尝试以下操作:
EnumAProperty = (EnumA)Enum.Parse(typeof(EnumA), EnumBProperty.ToString);
EnumBProperty = (EnumB)Enum.Parse(typeof(EnumB), EnumAProperty.ToString());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.