如何正确使用automapper将bool映射到枚举?

时间:2016-03-16 07:21:01

标签: c# enums boolean automapper

有人可以展示一个将npm update semantic属性映射到semantic类型的示例吗?我担心bool成员会有所停留。 我需要这样的东西:

enum属性值为第一个枚举值;

null到秒;

null到最后;

2 个答案:

答案 0 :(得分:3)

不幸的是,正如AutoMapper null source value and custom type converter, fails to map?所表达的那样,你无法直接映射" null"某事,因为null的地图总是会返回默认值(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
}

答案 1 :(得分:0)

尝试以下代码:

Enum:

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));