我正在嘗試使用在運行時從字串(用戶輸入)決議的型別引數來呼叫通用方法。這是我的測驗代碼:
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 });
這會因“ArgumentException:長度不正確”而失敗。
這是我正在呼叫的函式:
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);
}
我究竟做錯了什么?
uj5u.com熱心網友回復:
MakeGenericMethod的引數用于目標泛型方法的型別引數而不是方法引數,在您的情況下,該SetPreference方法只有 1 個 type-parameter: T,而不是 2。
SetPreference<Boolean>僅傳遞new Type[] { typeof(Boolean) }- 所以不要typeof(PlayerData.Preferences)傳遞給MakeGenericMethod.
MethodInfo method = typeof(GameManager).GetMethod(nameof(GameManager.SetPreference));
MethodInfo genericMethod = method.MakeGenericMethod(new Type[] { typeof(bool) });
genericMethod.Invoke(new GameManager(), new object[] { PlayerData.Preferences.WaitMode, true });
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/460172.html
