如何使用Automapper将bool映射到枚举类型?

5

有人能展示一下将 bool 属性映射到 enum 类型的示例吗?我担心目标中会有 null 成员。

我需要像这样的东西:

null 属性值映射为第一个枚举值;

0 映射为第二个枚举值;

1 映射为最后一个枚举值;

2个回答

7

不幸的是,正如在这里所表达的AutoMapper null源值和自定义类型转换器,无法映射?你不能直接将"null"映射到某个东西,因为对null的映射总是会返回default(T),所以你不能像这样做:

    CreateMap<bool?, MyStrangeEnum>()
        .ConvertUsing(boolValue => boolValue == null
            ? MyStrangeEnum.NullValue
            : boolValue.Value ? MyStrangeEnum.True : MyStrangeEnum.False);

如果你映射对象属性,它会正常工作:
public class MapperConfig : Profile
{
    protected override void Configure()
    {
        CreateMap<Foo, Bar>()
            .ForMember(dest => dest.TestValue,
                e => e.MapFrom(source =>
                    source.TestValue == null
                        ? MyStrangeEnum.NullValue
                        : source.TestValue.Value ? MyStrangeEnum.True : MyStrangeEnum.False));
    }
}

public class Foo
{
    public Foo()
    {
        TestValue = true;
    }
    public bool? TestValue { get; set; }
}

public class Bar
{
    public MyStrangeEnum TestValue { get; set; }
}

public enum MyStrangeEnum
{
    NullValue = -1,
    False = 0,
    True = 1
}

0
尝试像下面的代码一样:

枚举:

public enum BoolVal {
    NullVal = -1 ,
    FalseVal = 0 ,
    TrueVal = 1
}

声明变量:

        var val  = BoolVal.NullVal; // OR (BoolVal.FalseVal ,BoolVal.TrueVal)

测试值:

// This will return => null or true or false 
bool? value1 = (val == BoolVal.NullVal ? null : (bool?)Convert.ToBoolean(val)); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接