private static Dispatcher CreateCoerceDispatcher(object value, Type toType)
{
if (toType.IsInstanceOfType(value)) return IdentityDispatcher;
if (value is ICoercible) return CoercibleDispatcher;
var fromType = value.GetType();
if (IsPromotableNumeric(fromType) && IsPromotableNumeric(toType))
return EmitPromotionDispatcher(fromType, toType);
var method = FindImplicitConversionOperator(fromType, toType);
if (null == method) return IdentityDispatcher;
return EmitImplicitConversionDispatcher(method);
}