我有很多枚举类型,它们从服务返回,我想要映射到我的枚举类型。 我想要的是创建一个具有所有转换逻辑的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; )...有一个更好的方法吗? 通用可能吗?
答案 0 :(得分:2)
除非两组枚举的整数值或名称相同,否则在没有某种手动映射的情况下,不能将一个枚举值转换为另一个枚举值。
一些建议:
ErrEnumMapper
读取该属性。仍然是人工制图,可能只是重组了。当然,本着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
}
这使您可以保留命名惯例..