我有两个相同的C#枚举定义如下:
public enum ArrivalToleranceEnum
{
ZERO,
QUARTERHOUR,
HALFHOUR,
ONEHOUR,
TWOHOURS,
}
public enum ArrivalTolerance {
/// <remarks/>
ZERO,
/// <remarks/>
QUARTERHOUR,
/// <remarks/>
HALFHOUR,
/// <remarks/>
ONEHOUR,
/// <remarks/>
TWOHOURS,
}
ArrivalTolerance是在外部库中定义的,在我的程序中我想使用本地枚举ArrivalToleranceEnum,所以我需要转换这两种类型。我怎样才能做到这一点?我试图通过结束(使用开关)来做到这一点,但它是非常tedius而不是节省时间,因为我还需要更大的枚举。
答案 0 :(得分:6)
枚举值由整数常量表示。 如果底层枚举常量相同,则只需强制转换:
(ArrivalToleranceEnum)(int)ArrivalTolerance.HALFHOUR
如果它们不相同,您可以使用反射代码或Enum
类的静态成员之一自动执行映射。但是,这更乏味,也更慢。
答案 1 :(得分:6)
如果只有名字匹配,请不要使用此
var value = Enum.Parse(typeof(ArrivalToleranceEnum),ArrivalTolerance.ToString());
如果您不确定所有枚举的int值是否匹配,最好使用字符串匹配解决方案。
答案 2 :(得分:1)
枚举是int
类型的子集,您可以这样做:
ArrivalToleranceEnum ext;
ArrivalTolerance your_enum=(ArrivalTolerance)((int)ext);
如果名称相同,wudzik建议的解决方案是最安全的。
您还可以指定与每个枚举关联的int值,例如HALFHOUR=0,
答案 3 :(得分:0)
如果订单匹配,您可以直接投放:(ArrivalToleranceEnum)ArrivalTolerance.ZERO
但是,如果映射应该更具体,我建议使用Dictionary<ArrivalTolerance,ArrivalToleranceEnum>
,因为它比使用Enum.Parse
快得多。