2016-03-16 77 views

回答

2

Unfortutely,因爲這裏表達AutoMapper null source value and custom type converter, fails to map?你不能「空」直接映射到東西,因爲地圖空的將始終返回默認值(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

很好的解決方案,謝謝! – user3818229

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