public SourceObjectDictionaryAdapter( DictionarySourceMember sourceMember, EnumerablePopulationBuilder builder) : base(builder) { _instanceDictionaryAdapter = new SourceInstanceDictionaryAdapter(sourceMember, builder); _emptyTarget = TargetTypeHelper.GetEmptyInstanceCreation(TargetTypeHelper.EnumerableInterfaceType); }
public Expression GetMappingShortCircuitOrNull() { if (Builder.ElementTypesAreSimple) { return(null); } var sourceEnumerableFoundTest = SourceObjectDictionaryPopulationLoopData .GetSourceEnumerableFoundTest(_emptyTarget, Builder); var projectionAsTargetType = Expression.TypeAs(Builder.SourceValue, Builder.MapperData.TargetType); var allowEnumerableAssignment = Builder.MapperData.RuleSet.Settings.AllowEnumerableAssignment; var convertedProjection = TargetTypeHelper.GetEnumerableConversion(Builder.SourceValue, allowEnumerableAssignment); var projectionResult = Expression.Coalesce(projectionAsTargetType, convertedProjection); var returnConvertedProjection = Expression.Return(Builder.MapperData.ReturnLabelTarget, projectionResult); var ifProjectedReturn = Expression.IfThen(sourceEnumerableFoundTest, returnConvertedProjection); return(ifProjectedReturn); }