使用不同的命名空间映射两个相同的枚举

时间:2013-11-08 10:18:02

标签: c# parsing enums type-conversion

我有两个相同的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而不是节省时间,因为我还需要更大的枚举。

4 个答案:

答案 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快得多。