public FunctionParameters(ParameterInfo[] parameterInfo, MethodInfo methodInfo)
{
int sum = 0;
int minArg = parameterInfo.Length;
int maxArg = parameterInfo.Length;
var takeMax = false;
Length = parameterInfo.Length;
ParameterTypes = new Type[Length];
for (var i = 0; i < Length; i++)
{
var t = parameterInfo[i].ParameterType;
for (var j = 0; j < t.Name.Length; j++)
sum += (int)t.Name[j];
ParameterTypes[i] = t;
}
Weight = sum;
OptionalArguments = methodInfo.GetCustomAttributes(typeof(ArgumentsAttribute), false) as ArgumentsAttribute[];
foreach (var opt in OptionalArguments)
{
if (opt.MaximumArguments == int.MaxValue)
takeMax = true;
else
{
maxArg += opt.MaximumArguments;
maxArg--;
}
minArg--;
minArg += opt.MinimumArguments;
}
MaximumArguments = takeMax ? int.MaxValue : maxArg;
MinimumArguments = minArg;
}