2011-08-11 86 views
5

我有两个非常相似但不相同的C#对象。我将这些值从一个类复制到另一个类。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

是的,我知道我需要一组赋值! – AJM

+0

嗯,不知道枚举类型是否以这种方式兼容...... –

+0

,除非您为枚举成员分配值并获取EnumA的值并将该值赋予EnumB。这会起作用吗? –

回答

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"); 
    } 
} 
+1

对于ver而言,+1是重要的,但经常被忽略,指出您可以指定一个未在枚举中定义的值。 –

4

每个enum成员都有相应的整数值。
默认情况下,这些值将按照从0开始的升序进行分配。

如果枚举的项目(因此它们的数值)的顺序是一样的,你可以只投数值来EnumB使用相同的值来获得EnumB成员:

EnumBProperty = (EnumB)(int)EnumAProperty; 

如果没有,您需要重新解析它:

EnumBProperty = (EnumB)Enum.Parse(typeof(EnumB), EnumAProperty.ToString()); 
0

你既可以把它转换为整数或将其转换为字符串,然后做一个Enum.Parse就可以了。

0

尝试以下操作:

EnumAProperty = (EnumA)Enum.Parse(typeof(EnumA), EnumBProperty.ToString); 
1

只要不同类型的两个枚举的你can'not直接分配给它。 可以定义为整数的项目相互抵消,所以你可以通过整数值

public enum EnumA 
{ 
A = 0, 
B = 1 
} 

public enum EnumB 
{ 
A = 0, 
B = 1 
} 

EnumBPropertry = (int)EnumAProperty 
+0

没关系,直到有人改变了枚举的定义而不是另一个。 –

0
EnumBProperty = (EnumB)Enum.Parse(typeof(EnumB), EnumAProperty.ToString()); 
相关问题