protected internal override Func <object[], object> ToDelegate(OverloadResolver resolver, RestrictedArguments args, bool[] hasBeenUsed) { if (resolver.GetActualArguments().CollapsedCount > 0) { return(null); } var indexes = new List <Func <object[], object> >(_expandedCount); for (int i = _start; i < _start + _expandedCount; i++) { if (!hasBeenUsed[i]) { indexes.Add(resolver.GetConvertor(i + 1, args.GetObject(i), ParameterInfo, _elementType)); hasBeenUsed[i] = true; } } if (_elementType == typeof(object)) { return(new ParamArrayDelegate <object>(indexes.ToArray(), _start).MakeParamsArray); } Type genType = typeof(ParamArrayDelegate <>).MakeGenericType(_elementType); return((Func <object[], object>)Delegate.CreateDelegate( typeof(Func <object[], object>), Activator.CreateInstance(genType, indexes.ToArray(), _start), genType.GetMethod("MakeParamsArray"))); }
protected internal override Func <object[], object> ToDelegate(OverloadResolver resolver, RestrictedArguments args, bool[] hasBeenUsed) { Func <object[], object> conv = resolver.GetConvertor(_index + 1, args.GetObject(_index), ParameterInfo, _parameterType); if (conv != null) { return(conv); } return((Func <object[], object>)Delegate.CreateDelegate( typeof(Func <object[], object>), _index + 1, typeof(ArgBuilder).GetMethod("ArgumentRead"))); }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1045:DoNotPassTypesByReference")] // TODO internal protected virtual Func <object[], object> ToDelegate(ref MethodInfo method, OverloadResolver resolver, RestrictedArguments args, bool[] hasBeenUsed) { if (_index == -1) { return((_) => null); } GetCallableMethod(args, ref method); Func <object[], object> conv = resolver.GetConvertor(_index + 1, args.GetObject(_index), null, method.DeclaringType); if (conv != null) { return(conv); } return((Func <object[], object>)Delegate.CreateDelegate( typeof(Func <object[], object>), _index + 1, typeof(ArgBuilder).GetMethod("ArgumentRead"))); }