public virtual void Emit(CompilationContext context) { var sourceType = SourceType; var targetType = TargetMember.MemberType; var targetCanWrite = TargetMember.CanWrite(HasOption(MemberMapOptions.NonPublic)); if (targetCanWrite && _converter != null) { EmitSource(context); _converter.Emit(sourceType, targetType, context); EmitSetTarget(context); return; } if (!targetCanWrite && _mapper != null) { EmitSource(context); EmitSetTarget(context); _mapper.Emit(sourceType, targetType, context); return; } if (!HasOption(MemberMapOptions.Hierarchy) || #if NETSTANDARD !targetType.GetTypeInfo().IsClass #else !targetType.IsClass #endif || targetType.IsNullable()) { var converter = GetConvertEmitter(sourceType, targetType); if (converter != null) { EmitSource(context); converter(context); EmitSetTarget(context); } }