首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Enum转换为其他Enum

Enum转换为其他Enum
EN

Stack Overflow用户
提问于 2012-10-17 08:54:52
回答 2查看 248关注 0票数 0

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

代码语言:javascript
复制
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();
    }
}

但是,由于我有许多其他Enum,因此,我必须创建许多静态字段(如“字典”字段)和它们的等效方法(如“GetEnum”)可能是普通的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-17 09:09:44

除非两组枚举的积分值或名称是相同的,否则除非手动映射,否则不能从一个枚举值转到另一个枚举值。

一些建议:

  1. 如果可能的话,重用原始枚举
  2. 将映射枚举的整数值与原始枚举保持相同,这样您就可以从一个转换到另一个。
  3. 对枚举名使用约定,这样您就可以从一个映射到另一个。
  4. 在每个映射的枚举值上使用一个自定义属性,该属性指示相关的原始枚举值,并让ErrEnumMapper读取该属性。仍然是手动映射,也许只是重新组织。

当然,本着接吻的精神,我会坚持使用#1,#2,或者只处理手动映射。

票数 2
EN

Stack Overflow用户

发布于 2012-10-17 09:04:08

也许我不是真的明白你的意思..。但是,如果它们具有相同的基本值,则可以显式地转换它们:

代码语言:javascript
复制
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
}

这样你就可以保持你的命名惯例了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12930563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档