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

本文关键字:重载 方法 何通过 反射 | 更新日期: 2023-09-27 18:33:14

这是一个与我之前问过的另一个问题相关的问题。我有一个重载的方法:

public void Add<T>(SomeType<T> some) { }
public void Add<T>(AnotherType<T> another) { }
如何通过反射

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

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

这里的诀窍是描述您希望参数SomeType<T>,其中TAdd方法的泛型类型。

除此之外,这只是使用标准反射,就像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();

查看 MethodInfo 成员:http://msdn.microsoft.com/en-US/library/system.reflection.methodinfo_members(v=vs.80).aspx

有用于 IsGenericMethodDefinitionGetParameters 的帮助程序属性。两者都可以帮助您弄清楚什么功能是什么。