枚举转换为其他枚举

时间:2012-10-17 08:54:53

标签: c# asp.net-mvc enums

我有很多枚举类型,它们从服务返回,我想要映射到我的枚举类型。 我想要的是创建一个具有所有转换逻辑的mapper类。 我做了这样的事情:

public static class ErrEnumMapper
{
    private static Dictionary<FullErrorTypeError, eError> dictionary;

    static ErrEnumMapper()
    {
        var dictionary = new Dictionary<FullErrorTypeError, eError>()
        {
            {FullErrorTypeError.APP, eError.APPLICATION},
            {FullErrorTypeError.INF, eError.INF},
            {FullErrorTypeError.NO, eError.NONE},
            {FullErrorTypeError.PAX, eError.PASSENGER},
            {FullErrorTypeError.SYS, eError.SYSTEM}
        };
    }

    public static eError GetEnum(FullErrorTypeError key)
    {
        var val = dictionary[key];
        if (val != null)
            return val;

        throw new InvalidOperationException();
    }
}

但是由于我有很多其他枚举,所以我必须创建许多静态字段(如&#34;字典和#34;字段)及其等效方法(如&#34; GetEnum&#34; )...有一个更好的方法吗? 通用可能吗?

2 个答案:

答案 0 :(得分:2)

除非两组枚举的整数值或名称相同,否则在没有某种手动映射的情况下,不能将一个枚举值转换为另一个枚举值。

一些建议:

  1. 尽可能重用原始枚举
  2. 保持映射枚举的整数值与原始枚举相同,这样您就可以从一个枚举到另一个。
  3. 对枚举名称使用约定,以便您可以从一个映射到另一个。
  4. 在每个映射的枚举值上使用自定义属性,指示相关的原始枚举值,并ErrEnumMapper读取该属性。仍然是人工制图,可能只是重组了。
  5. 当然,本着KISS的精神,我坚持使用#1,#2,或者只是处理手动映射。

答案 1 :(得分:0)

也许我并没有真正理解你的意思..但如果它们具有相同的潜在价值,你可以明确地施展它们:

enum FirstEnum {
    ONE,
    TWO,
    THREE
}

enum SecondEnum {
    FOUR,
    FIVE,
    SIX
}

static void Main(string[] args) {
    FirstEnum first = FirstEnum.ONE;

    SecondEnum second = (SecondEnum)first;

    Console.WriteLine(second); // prints FOUR
}

这使您可以保留命名惯例..