如何在多对一关系中映射枚举

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 是否可以使用自动映射器或一些自定义属性?

假设您已经将序列化程序设置为发送字符串,您似乎只是在寻找一种将 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