object[] ArgumentsForAttributeConstructor(IConstructor ctor, ExpressionCollection args)
{
var varargs = ctor.AcceptVarArgs;
var parameters = ctor.GetParameters();
var result = new object[parameters.Length];
var lastIndex = parameters.Length - 1;
var fixedParameters = (varargs ? parameters.Take(lastIndex) : parameters);
var i = 0;
foreach (var parameter in fixedParameters)
{
result[i] = GetValue(parameter.Type, args[i]);
++i;
}
if (varargs)
{
var varArgType = parameters[lastIndex].Type.ElementType;
result[lastIndex] = args.Skip(lastIndex).Select(e => GetValue(varArgType, e)).ToArray();
}
return result;
}