Ejemplo n.º 1
0
        private Expression ParseExtensionMethodInvocation(Type type, Expression instance, int errorPos, string id, Expression[] args)
        {
            var extensionMethodsArguments = new Expression[args.Length + 1];

            extensionMethodsArguments[0] = instance;
            args.CopyTo(extensionMethodsArguments, 1);

            var matchMethods     = _arguments.GetExtensionMethods(id);
            var extensionMethods = Expressions.FindBestMethod(matchMethods, extensionMethodsArguments);

            if (extensionMethods.Length > 1)
            {
                throw ParseException.Create(errorPos, ErrorMessages.AmbiguousMethodInvocation, id, Types.GetTypeName(type));
            }

            if (extensionMethods.Length == 1)
            {
                var method = extensionMethods[0];

                extensionMethodsArguments = method.PromotedParameters;

                return(Expression.Call((MethodInfo)method.MethodBase, extensionMethodsArguments));
            }

            return(null);
        }