SRI*_*NTH 2 c# unity-game-engine
尝试通过字符串调用函数
{
object[] Parms = new object[] { "oiad", "abdj", "i" };
Type thisType = GetType();
MethodInfo theMethod = thisType.GetMethod("invo");
ParameterInfo[] parameters = theMethod.GetParameters();
if (parameters.Length != 0)
{
theMethod.Invoke(_instance, Parms);
}
}
public void invo(object[] per)
{
//
}
Run Code Online (Sandbox Code Playgroud)
例外:
TargetParameterCountException: Number of parameters specified does not match the expected number.
System.Reflection.MonoMethod.ConvertValues (System.Reflection.Binder binder, System.Object[] args, System.Reflection.ParameterInfo[] pinfo, System.Globalization.CultureInfo culture, System.Reflection.BindingFlags invokeAttr) (at <7d97106330684add86d080ecf65bfe69>:0)
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <7d97106330684add86d080ecf65bfe69>:0)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters)
Run Code Online (Sandbox Code Playgroud)
如果我使用null作为参数:
theMethod.Invoke(_instance, null);
Run Code Online (Sandbox Code Playgroud)
效果很好。问题在于传递参数和system.object
我你写:object[] Parms = new object[] { "oiad", "abdj", "i" };
这意味着方法 invo 的参数是: public void invo(string s1, string s2, string s3)
如果你有public void invo(object[] per)
你必须写object[] Parms = new object[] { new object[]{ "oiad", "abdj", "i"}};