如何使用 Type.GetMethod(string name, int genericParameterCount, Type[] types) 获取通用 MethodInfo?

How to get a generic MethodInfo with Type.GetMethod(string name, int genericParameterCount, Type[] types)?

我正在尝试获取特定方法 MethodInfoInterlocked.CompareExchange<T>(ref T, T, T) 并尝试了以下代码无济于事:

typeof(Interlocked).GetMethod(nameof(Interlocked.CompareExchange), 1, new Type[] { typeof(int), typeof(int), typeof(int) })

注意typeof(int)只是随机类型。我只需要 MethodInfo 这样我以后就可以使用 GetGenericMethodDefinition 不同的类型。

我们应该传递什么类型的数组来获取所需的方法?

事实证明解决方案非常简单:

Type genericType = Type.MakeGenericMethodParameter(0);
Type[] types = new Type[] { genericType.MakeByRefType(), genericType, genericType };

MethodInfo methodInfo = typeof(Interlocked).GetMethod(nameof(Interlocked.CompareExchange), 1, types);