Beispiel #1
0
        private float ComputeScoreForParamArray(ParameterInfo[] parameters, Type[] argTypes)
        {
            var paramArrayParameter = parameters[parameters.Length - 1];
            var fixedParameterCount = paramArrayParameter.Position;

            var fixedParameters = new ParameterInfo[fixedParameterCount];

            Array.Copy(parameters, fixedParameters, fixedParameterCount);

            var fixedSum = ComputeSum(fixedParameters, this.myFixedArgTypes);

            var paramArrayElementType = paramArrayParameter.ParameterType.GetElementType();

            var paramArraySum = 0;

            foreach (var argType in this.myParamArrayArgTypes)
            {
                paramArraySum += ImplicitConverter.GetImplicitConvertScore(argType, paramArrayElementType);
            }

            float score = 0;

            if (argTypes.Length > 0)
            {
                score = (fixedSum + paramArraySum) / argTypes.Length;
            }
            else
            {
                score = 0;
            }

            // The param array score gets a slight penalty so that it scores worse than direct matches
            return(score + 1);
        }
Beispiel #2
0
        private static int ComputeSum(ParameterInfo[] parameters, Type[] argTypes)
        {
            Debug.Assert(parameters.Length == argTypes.Length);
            var sum = 0;

            for (var i = 0; i <= parameters.Length - 1; i++)
            {
                sum += ImplicitConverter.GetImplicitConvertScore(argTypes[i], parameters[i].ParameterType);
            }

            return(sum);
        }