如何使用多个参数使用makeGenericMethod
我正在尝试使用字符串(用户输入)在运行时解析的类型参数调用通用方法。这是我的测试代码:
MethodInfo method = typeof(GameManager).GetMethod(nameof(GameManager.SetPreference));
MethodInfo genericMethod = method.MakeGenericMethod(new Type[] { typeof(PlayerData.Preferences), typeof(bool) });
genericMethod.Invoke(new GameManager(), new object[] { PlayerData.Preferences.WaitMode, true });
这将失败,“ grigentException:不正确的长度”。
这是我称之为的功能:
public void SetPreference<T>(PlayerData.Preferences preference, T value)
{
try
{
PlayerData.SetAttr(preference.ToString(), value);
}
catch (Exception e)
{
Debug.LogError(e);
return;
}
OnPreferenceChanged.Raise(preference);
}
我在做什么错?
I am trying to invoke a generic method using a type argument that is parsed at runtime from a string (user input). Here is my test code:
MethodInfo method = typeof(GameManager).GetMethod(nameof(GameManager.SetPreference));
MethodInfo genericMethod = method.MakeGenericMethod(new Type[] { typeof(PlayerData.Preferences), typeof(bool) });
genericMethod.Invoke(new GameManager(), new object[] { PlayerData.Preferences.WaitMode, true });
This fails with "ArgumentException: Incorrect length".
Here is the function I'm calling:
public void SetPreference<T>(PlayerData.Preferences preference, T value)
{
try
{
PlayerData.SetAttr(preference.ToString(), value);
}
catch (Exception e)
{
Debug.LogError(e);
return;
}
OnPreferenceChanged.Raise(preference);
}
What am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
MakeGenericMethod
的参数是针对目标通用方法的 type-parameters 而不是方法参数,在您的情况下,set> setpReference /code>方法只有1个类型参数:
t
,而不是2。对于
setpReference&lt; boolean&gt;
仅通过new Type> new Type [] {typeof(boolean)}
- 因此,请勿通过typef(playerData.preferences)
makegenericMethod
。MakeGenericMethod
's parameters are for the type-parameters of the target generic method not the method parameters, in your case theSetPreference
method only has 1 type-parameter:T
, not 2.For
SetPreference<Boolean>
pass onlynew Type[] { typeof(Boolean) }
- so don't passtypeof(PlayerData.Preferences)
toMakeGenericMethod
.