如何通过反射找到重载方法

age*_*t47 5 c# generics reflection methodinfo

这是我之前提出的另一个问题的问题.我有一个重载的方法:

public void Add<T>(SomeType<T> some) { }

public void Add<T>(AnotherType<T> another) { }
Run Code Online (Sandbox Code Playgroud)

如何通过反射找到每种方法?例如,如何Add<T>(SomeType<T> some)通过反射获得方法?你能帮我吗?提前致谢.

Cri*_*scu 6

这里的技巧是描述您希望参数是什么SomeType<T>,其中T是方法的泛型类型Add.

除此之外,它只是使用标准反射,就像CastroXXL在他的回答中所建议的那样.

我是这样做的:

var theMethodISeek = typeof(MyClass).GetMethods()
    .Where(m => m.Name == "Add" && m.IsGenericMethodDefinition)
    .Where(m =>
            {
                // the generic T type
                var typeT = m.GetGenericArguments()[0];

                // SomeType<T>
                var someTypeOfT = 
                    typeof(SomeType<>).MakeGenericType(new[] { typeT });

                return m.GetParameters().First().ParameterType == someTypeOfT;
            })
    .First();
Run Code Online (Sandbox Code Playgroud)