2014-11-22 144 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();