MethodInfo.Invoke() throwing ArgumentException: failed to convert parameters

Hello,
I am creating an editor script in which the user should be able to select a script file he wrote, and a function from this script should be invoked sometime during the game.

I have a class which stores a MethodInfo field, and this is the function I am trying to invoke.

Now, if the function receives only a float for example it works, so this line works:

propertyData.transformationFunc.Get().Invoke(propertyData.transformationObj.Get(), new object[] { param });

small explanation - transformationFunc.Get() gives me a MethodInfo, transformationObj.Get() gives me an instance of the class which holds the function I am invoking and param is a float.

Although, what I really want to pass in this function right now is a float and ALSO a Vector3 value. So if I change the function to receive a Vector3 in addition to the float and I try invoking like this:

propertyData.transformationFunc.Get().Invoke(propertyData.transformationObj.Get(), new object[] { param , propertyData.property.Get() });

it doesn’t work and throws the exception stated in the title of this question.

small explanation - propertyData.property.Get() in this case returns UnityEngine.Vector3, so it should be compatible with a function which receives a float and a Vector3.

Thanks all.

Reflection does not care about function overloading. Instead use Type::GetMethods : MethodInfo[] instead and make a function like this:

public static void SafeInvoke(this MethodInfo[] methods, object target, params object[] args)
{
	foreach (var method in methods)
	{
		var parameters = method.GetParameters();
		if (args.Length != parameters.Length)
			continue;
				
		// Check if a type does not match
		if (parameters.Where((t, i) => args*.GetType() != t.ParameterType).Any())*
  •  	continue;*
    
  •  method.Invoke(target, args);*
    
  •  return;*
    
  • }*

  • throw new ArgumentException();*
    }
    Note: This is not tested
    Edit: Alternatively you get use Type::GetMethod("MyMethodName", new [] {typeof(MyType),})

Thank you!