如何使用具有多个参数的 MakeGenericMethod

How to use MakeGenericMethod with multiple parameters

我正在尝试使用在运行时从字符串(用户输入)解析的类型参数来调用通用方法。这是我的测试代码:

        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);
    }

我做错了什么?

MakeGenericMethod的参数用于目标泛型方法的type-parameters而不是方法参数 ,在您的情况下,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 });