if (match == null)
throw new ArgumentNullException ("match");
+ /* first look for an exact match... */
+ for (i = 0; i < match.Length; ++i) {
+ m = match [i];
+ ParameterInfo[] args = m.GetParameters ();
+ if (args.Length != types.Length)
+ continue;
+ for (j = 0; j < types.Length; ++j) {
+ if (types [j] != args [j].ParameterType)
+ break;
+ }
+ if (j == types.Length)
+ return m;
+ }
+
+ /* Try methods with ParamArray attribute */
bool isdefParamArray = false;
Type elementType = null;
-
- /* first look for an exact match... */
for (i = 0; i < match.Length; ++i) {
m = match [i];
ParameterInfo[] args = m.GetParameters ();
if (args.Length > types.Length)
continue;
- else if(args.Length <= types.Length & args.Length > 0)
- {
- isdefParamArray = Attribute.IsDefined (args [args.Length - 1], typeof (ParamArrayAttribute));
- if (isdefParamArray)
- elementType = args [args.Length - 1].ParameterType.GetElementType ();
- if (args.Length != types.Length & !isdefParamArray)
- continue;
- }else if(args.Length == 0 & types.Length > 0)
+ else if (args.Length == 0)
+ continue;
+ isdefParamArray = Attribute.IsDefined (args [args.Length - 1], typeof (ParamArrayAttribute));
+ if (!isdefParamArray)
continue;
+ elementType = args [args.Length - 1].ParameterType.GetElementType ();
for (j = 0; j < types.Length; ++j) {
- if (!isdefParamArray && types [j] != args [j].ParameterType)
+ if (j < (args.Length - 1) && types [j] != args [j].ParameterType)
+ break;
+ else if (j >= (args.Length - 1) && types [j] != elementType)
break;
- else if (isdefParamArray) {
- if (j < (args.Length - 1) && types [j] != args [j].ParameterType)
- break;
- else if (j >= (args.Length - 1) && types [j] != elementType)
- break;
- }
}
if (j == types.Length)
return m;