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)); }
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); }
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); }
public override int Match(ConverterMatchContext context) { return(context.TargetType == typeof(string) ? Helper.GetDistance(context.SourceType, typeof(object)) : -1); }
public abstract int Match(ConverterMatchContext context);