5

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

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

public void Add<T>(AnotherType<T> another) { }

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

4

2 回答 2

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();
于 2012-05-05T19:09:02.633 回答
0

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

IsGenericMethodDefinition和有辅助属性GetParameters。两者都可以帮助您弄清楚什么是什么功能。

于 2012-05-05T18:52:32.173 回答