2014-11-22 130 views
2

我有一个从数据库,我想转换为第三方的枚举数组的标志性枚举。映射标志枚举数组

对于这一点,我用下面的代码:

private TheirEnum[] GetTheirEnums(MyEnum? ourEnums) 
    { 
     List<TheirEnum> result = new List<TheirEnum>(); 
     if (ourEnums != null) 
     { 
      if (ourEnums.Value.HasFlag(MyEnum.Geothermal)) 
      { 
       result.Add(TheirEnum.GEOTHERMAL); 
      } 

      if (ourEnums.Value.HasFlag(MyEnum.SolarHeating)) 
      { 
       result.Add(TheirEnum.SOLAR_HEATING); 
      } 
     } 
     else 
     { 
      result.Add(TheirEnum.NO_INFORMATION); 
     } 

     return result.ToArray(); 
    } 

然而,因为有在枚举列表超过50个条目,我相信这会变得非常混乱和丑陋。有一个更好的方法吗?

回答

6

一个简单的解决方案是创建OurEnum基于TheirEnum,然后简单的演员就可以做到这一点。

这里有一个例子:

[Flags] 
    public enum TheirEnum 
    { 
     GEOTHERMAL=1, 
     SOLAR_HEATING=2, 
     NO_INFORMATION=4 
    } 


    [Flags] 
    public enum OurEnum 
    { 
     Geothermal=TheirEnum.GEOTHERMAL, 
     SolarHeating=TheirEnum.SOLAR_HEATING, 
     NoInformation=TheirEnum.NO_INFORMATION 
    } 

,甚至你可以使用的值:

[Flags] 
    public enum OurEnum 
    { 
     Geothermal=1, 
     SolarHeating=2, 
     NoInformation=4 
    } 

那么一个简单的投将其转换:

 var ourValue = OurEnum.Geothermal | OurEnum.NoInformation; 
     var theirValue = (TheirEnum) ourValue; 

最后我们可以根据标记的枚举简单地创建一个数组theirValue

 var values=Enum.GetValues(typeof(TheirEnum)); 
     var array= (from TheirEnum v in values where theirValue.HasFlag(v) select v).ToArray();