5

我定义了两个相同的 C# 枚举,如下所示:

public enum ArrivalToleranceEnum
{
    ZERO,
    QUARTERHOUR,
    HALFHOUR,
    ONEHOUR,
    TWOHOURS,
}

public enum ArrivalTolerance {

    /// <remarks/>
    ZERO,

    /// <remarks/>
    QUARTERHOUR,

    /// <remarks/>
    HALFHOUR,

    /// <remarks/>
    ONEHOUR,

    /// <remarks/>
    TWOHOURS,
}

ArrivalTolerance 在外部库中定义,在我的程序中我想使用本地枚举 ArrivalToleranceEnum 所以我需要转换这两种类型。我怎样才能做到这一点?我试图最终做到这一点(使用开关),但它非常乏味而且不是很节省时间,因为我需要转换其他更大的枚举。

4

4 回答 4

8

枚举值由整数常量表示。如果底层枚举常量相同,只需强制转换:

(ArrivalToleranceEnum)(int)ArrivalTolerance.HALFHOUR

如果它们不同,您可以使用反射代码或Enum类的静态成员之一自动映射。不过,这更乏味,也更慢。

于 2013-11-08T10:21:57.693 回答
7

如果只有名称匹配,则不按顺序使用

var value = Enum.Parse(typeof(ArrivalToleranceEnum),ArrivalTolerance.ToString());

如果您不确定所有枚举的 int 值是否匹配,最好使用字符串匹配解决方案。

于 2013-11-08T10:22:46.310 回答
1

枚举是int 类型的子集,你可以这样做:

ArrivalToleranceEnum ext;
ArrivalTolerance your_enum=(ArrivalTolerance)((int)ext);

如果名称相同,wudzik 建议的解决方案是最安全的。

您还可以指定要与每个枚举关联的 int 值,例如HALFHOUR=0,

于 2013-11-08T10:24:41.427 回答
1

如果顺序匹配,您可以直接转换它:(ArrivalToleranceEnum)ArrivalTolerance.ZERO

但是,如果映射应该更具体,我建议使用 a Dictionary<ArrivalTolerance,ArrivalToleranceEnum>,因为它比使用Enum.Parse.

于 2013-11-08T10:26:46.637 回答