我有兩個列舉,源一個是來自 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
是自動映射器或一些自定義屬性有可能嗎?
uj5u.com熱心網友回復:
假設您已經將序列化程式設定為發送字串,您似乎只是在尋找一種將 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/481580.html
標籤:C# 网 。网 asp.net-mvc 视觉工作室
