如何通过反射找到重载方法 [英] How to find an overloaded method by reflection

查看:265
本文介绍了如何通过反射找到重载方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

This is a question associated with another question I asked before. I have an overloaded method:

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

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

通过反射找到每种方法?例如如何通过反射获取添加< T>(SomeType< T>一些)方法?你能帮我吗?

How can I find each method by reflection? e.g. How can I get the Add<T>(SomeType<T> some) method by reflection? Can you help me please? Thanks in advance.

推荐答案

这里的技巧是描述您希望参数为 SomeType< T> ; ,其中 T Add 方法的通用类型。

The trick here is describing that you want the parameter to be SomeType<T>, where T is the generic type of the Add method.

除此之外,它只是使用标准反射,就像他在答案中提到的CastroXXL一样。

Other than that, it's just about using standard reflection, like CastroXXL suggested in his answer.

以下是我做到的:

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

这篇关于如何通过反射找到重载方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆