public override int Match(ConverterMatchContext context)
        {
            int sourceDistance = Helper.GetDistance(context.SourceType, typeof(TSource));
            int targetDistance = Helper.GetDistance(context.TargetType, typeof(TTarget));

            return(sourceDistance == -1 || targetDistance == -1 ? -1 : sourceDistance + targetDistance);
        }
        private int ExecuteMatch(ConverterMatchContext context)
        {
            Type targetType = context.TargetType;
            Type sourceType = context.SourceType;

            if (targetType.IsNullable() && sourceType.IsNullable())
            {
                int distance = MatchConvert(sourceType.GetGenericArguments()[0], targetType.GetGenericArguments()[0]);
                if (distance != -1)
                {
                    return(distance + 2);
                }
            }
            if (targetType.IsNullable())
            {
                int distance = MatchConvert(sourceType, targetType.GetGenericArguments()[0]);
                if (distance != -1)
                {
                    return(distance + 1);
                }
            }
            if (sourceType.IsNullable())
            {
                int distance = MatchConvert(sourceType.GetGenericArguments()[0], targetType);
                if (distance != -1)
                {
                    return(distance + 1);
                }
            }
            return(MatchConvert(sourceType, targetType));
        }
Beispiel #3
0
 internal Converter Find(ConverterMatchContext context)
 {
     return((from converter in _converters
             let score = converter.Match(context)
                         where score >= 0
                         orderby score, converter.Intrinsic ? 1 : 0
             select converter).FirstOrDefault());
 }
 public override int Match(ConverterMatchContext context)
 {
     if (Equals(context.Properties[typeof(PrimitiveConverter)], true))
     {
         return(-1);
     }
     return(ExecuteMatch(context));
 }
        private Converter FindConverter(Type sourceType, Type targetType)
        {
            var matchContext = new ConverterMatchContext(sourceType, targetType);

            matchContext.Properties[typeof(PrimitiveConverter)] = true;
            Converter converter = Container.Converters.Find(matchContext);

            if (ReferenceEquals(converter, this))
            {
                return(null);
            }
            return(converter);
        }
Beispiel #6
0
 public override int Match(ConverterMatchContext context)
 {
     if (context.SourceType == typeof(string))
     {
         Type targetType = context.TargetType;
         if (targetType.IsNullable() && GetConvertMethod(targetType.GetGenericArguments()[0]) != null)
         {
             return(1);
         }
         if (GetConvertMethod(context.TargetType) != null)
         {
             return(0);
         }
     }
     return(-1);
 }
Beispiel #7
0
 public override int Match(ConverterMatchContext context)
 {
     return(context.TargetType == typeof(string) ? Helper.GetDistance(context.SourceType, typeof(object)) : -1);
 }
Beispiel #8
0
 public abstract int Match(ConverterMatchContext context);