如何在多对一关系中映射枚举
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
我有两个枚举,源是 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