CallMethod() public method

Performs binding against a set of overloaded methods using the specified arguments. The arguments are consumed as specified by the CallSignature object.
public CallMethod ( DefaultOverloadResolver resolver, IList targets ) : DynamicMetaObject
resolver DefaultOverloadResolver Overload resolver.
targets IList The methods to be called
return System.Dynamic.DynamicMetaObject
            public override DynamicMetaObject/*!*/ GetExpression(DefaultBinder/*!*/ binder) {
                var mc = new ParameterBinderWithCodeContext(binder, CodeContext);

                if (_creating.IsSystemType) {
                    return binder.CallMethod(
                        mc,
                        _creating.UnderlyingSystemType.GetConstructors(),
                        Arguments.Arguments,
                        Arguments.Signature,
                        Arguments.Self.Restrictions,
                        _creating.Name
                    );
                }

                return binder.CallMethod(
                    mc,
                    _creating.UnderlyingSystemType.GetConstructors(),
                    ArrayUtils.Insert(Arguments.Self, Arguments.Arguments),
                    GetDynamicNewSignature(),
                    Arguments.Self.Restrictions,
                    _creating.Name
                );
            }
            public override DynamicMetaObject/*!*/ GetExpression(DefaultBinder/*!*/ binder) {
                var mc = new ParameterBinderWithCodeContext(binder, CodeContext);

                CallSignature sig = Arguments.Signature.InsertArgument(new Argument(ArgumentType.Simple));
                return binder.CallMethod(
                    mc,
                    _ctor.Targets,
                    ArrayUtils.Insert(Arguments.Self, Arguments.Arguments),
                    sig,
                    _creating.Name
                );
            }
            public override DynamicMetaObject/*!*/ GetExpression(DefaultBinder/*!*/ binder) {
                var mc = new ParameterBinderWithCodeContext(binder, CodeContext);
                
                if (_creating.IsSystemType) {
                    return binder.CallMethod(
                        mc,
                        _creating.UnderlyingSystemType.GetConstructors(),
                        new DynamicMetaObject[0],
                        new CallSignature(0),
                        BindingRestrictions.Empty,
                        _creating.Name
                    );
                }

                return binder.CallMethod(
                    mc,
                    _creating.UnderlyingSystemType.GetConstructors(),
                    new DynamicMetaObject[] { Arguments.Self },
                    new CallSignature(1),
                    BindingRestrictions.Empty,                    
                    _creating.Name
                );
            }