public static TDestinationElement[] Map <TSource, TSourceElement, TDestinationElement>(TSource source, ResolutionContext context) where TSource : IEnumerable { if (source == null) { return(context.Mapper.ShouldMapSourceCollectionAsNull(context) ? null : new TDestinationElement[0]); } if (context.DestinationType.IsAssignableFrom(context.SourceType)) { var elementTypeMap = context.ConfigurationProvider.ResolveTypeMap(typeof(TSourceElement), typeof(TDestinationElement)); if (elementTypeMap == null) { return(source as TDestinationElement[]); } } var itemContext = new ResolutionContext(context); return(source.Cast <TSourceElement>() .Select(item => (TDestinationElement)itemContext.Map(item, null, typeof(TSourceElement), typeof(TDestinationElement))) .ToArray()); }
private static Array Map <TDestination, TSource, TSourceElement>(TSource source, ResolutionContext context, IConfigurationProvider configurationProvider) where TSource : IEnumerable { var sourceArray = source as Array; var destElementType = ElementTypeHelper.GetElementType(typeof(TDestination)); if (typeof(TDestination).IsAssignableFrom(typeof(TSource))) { var elementTypeMap = configurationProvider.ResolveTypeMap(typeof(TSourceElement), destElementType); if (elementTypeMap == null) { return(sourceArray); } } var destinationArray = Array.CreateInstance(destElementType, Enumerable.Range(0, sourceArray.Rank).Select(sourceArray.GetLength).ToArray()); var filler = new MultidimensionalArrayFiller(destinationArray); foreach (var item in source) { filler.NewValue(context.Map(item, null, typeof(TSourceElement), destElementType, null)); } return(destinationArray); }
public static object Map(this ResolutionContext context, MemberInfo member, object value) { var memberType = member.GetMemberType(); return(context.Map(value, null, value?.GetType() ?? memberType, memberType)); }