C# 可为Null的枚举映射器的Null替换

C# 可为Null的枚举映射器的Null替换,c#,automapper,C#,Automapper,我需要编写一个从可空枚举到常规枚举的映射程序。现在我用这个 CreateMap<FromEnum, ToEnum>(); CreateMap<FromEnum?, ToEnum>() .ConvertUsing((source, dest, context) => context.Mapper.Map<FromEnum, ToEnum>(source ?? FromEnum.SomeDefaultValue)); CreateMap()

我需要编写一个从可空枚举到常规枚举的映射程序。现在我用这个

CreateMap<FromEnum, ToEnum>();
CreateMap<FromEnum?, ToEnum>()
    .ConvertUsing((source, dest, context) =>
    context.Mapper.Map<FromEnum, ToEnum>(source ?? FromEnum.SomeDefaultValue));
CreateMap();
CreateMap()
.ConvertUsing((源、目标、上下文)=>
context.Mapper.Map(源??fromnum.SomeDefaultValue));
但我真的不喜欢这个解决方案。首先,意图不是很清楚,其次,只有当源枚举具有“默认值”等效项时,它才起作用。当然,我可以使用

CreateMap<FromEnum?, ToEnum>()
    .ConvertUsing((source, dest, context) =>
    source == null ? ToEnum.SomeDefaultValue : context.Mapper.Map<FromEnum, ToEnum>(source.Value));
CreateMap()
.ConvertUsing((源、目标、上下文)=>
source==null?ToEnum.SomeDefaultValue:context.Mapper.Map(source.Value));
但我认为这将进一步降低可读性


是否有某种方法可以将null替换为整个映射,而不仅仅是一个成员?仅仅使用一张地图就可以做到这一点吗?(我从不使用不可为空的
FromEnum

枚举的默认值应为零,然后在没有任何额外映射的情况下获得此行为。@LucianBargaoanu我刚刚发现automapper按值映射枚举,而不是按字符串名称映射。但如果删除显式映射创建,它实际上是按名称映射的。但我需要这样的行为:按名称映射枚举,为null提供特定值,如果目标枚举缺少源具有的某些名称,则验证失败。可能吗?