static bool IsApplicable(SoftEvaluationContext ctx, MethodMirror method, TypeMirror[] types, out string error, out int matchCount)
        {
            ParameterInfoMirror[] mparams = method.GetParameters();
            matchCount = 0;

            for (int i = 0; i < types.Length; i++)
            {
                TypeMirror param_type = mparams[i].ParameterType;

                if (param_type.FullName == types [i].FullName)
                {
                    matchCount++;
                    continue;
                }

                if (param_type.IsAssignableFrom(types [i]))
                {
                    continue;
                }

                error = String.Format(
                    "Argument {0}: Cannot implicitly convert `{1}' to `{2}'",
                    i, types [i].FullName, param_type.FullName);
                return(false);
            }

            error = null;
            return(true);
        }