簡體   English   中英

如何在多對一關系中映射枚舉

[英]How do I map enums in many-to-one relationship

我有兩個枚舉,源一個是來自 api 的響應,另一個是我想發送到前端的。

public enum ApiResponse
{
    A=1,
    B=2,
    C=3,
    D=4
}


public enum DestEnum
{
    A=1,
    BCD=2
}

我想做的是:

public class ExampleViewModel
{
    public DestEnum foo { get; set; }
}

var response = ApiResponse.C;

result = new ExampleViewModel()
{
    foo = response
};

我希望foo值是DestEnum.BCD是否可以使用 automapper 或一些自定義屬性?

假設您已經將序列化程序設置為發送字符串,您似乎只是在尋找一種將 X 映射到 Y 的方法

怎么樣:

public static class EnumExtensions{
  static Dictionary<ApiResponse,DestEnum> _mapDest = 
  new() {
      [ApiResponse.A] = DestEnum.A,
      [ApiResponse.B] = DestEnum.BCD,
      [ApiResponse.C] = DestEnum.BCD,
      [ApiResponse.D] = DestEnum.BCD,
      
  };
    
  public static DestEnum AsDest(this ApiResponse x) => _mapDest[x];
}

然后您可以將獲得的 ApiRespnse 轉換為 Dest,例如:

return new BlahViewModel{

  DestEnumProperty = apiResponseEnumValueIGot.AsDest(),
  OtherProp = ...
}

警告,如果您得到任何未映射的值,查找將會崩潰; 如果您認為這將成為可能,請考慮在您的 DestEnum 中使用 Unknown 值並執行以下操作:

=> _mapDest.TryGetValue(x, out var r) ? r : DestEnum.Unknown

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM