private void ConvertArguments(Object[] args, Object[] newargs, int offset, int length, int n, Binder binder, CultureInfo culture){
ParameterInfo[] pars = this.parameterInfos;
if (pars != null){
for (int i = 0, j = offset; i < n; i++, j++){
Type t = pars[j].ParameterType;
if (i == n-1 && CustomAttribute.IsDefined(pars[j], typeof(ParamArrayAttribute), false)){
int k = length-i; if (k < 0) k = 0;
newargs[j] = FunctionObject.CopyToNewParamArray(t.GetElementType(), k, args, i, binder, culture);
return;
}
Object argval = i < length ? args[i] : null;
if (t == Typeob.Object)
newargs[j] = argval;
else if (binder != null)
newargs[j] = binder.ChangeType(argval, t, culture);
else
newargs[j] = Convert.CoerceT(argval, t);
}
}else{
ParameterDeclaration[] pds = this.parameter_declarations;
for (int i = 0, j = offset; i < n; i++, j++){
IReflect ir = pds[i].ParameterIReflect;
if (i == n-1 && CustomAttribute.IsDefined(pds[j], typeof(ParamArrayAttribute), false)){
int k = length-i; if (k < 0) k = 0;
newargs[j] = FunctionObject.CopyToNewParamArray(((TypedArray)ir).elementType, k, args, i);
return;
}
Object argval = i < length ? args[i] : null;
if (ir == Typeob.Object){
newargs[j] = argval; continue;
}
if (ir is ClassScope)
newargs[j] = Convert.Coerce(argval, ir);
else if (binder != null)
newargs[j] = binder.ChangeType(argval, Convert.ToType(ir), culture);
else
newargs[j] = Convert.CoerceT(argval, Convert.ToType(ir));
}
}
}