如何通过反射找到重载方法 [英] How to find an overloaded method by reflection
本文介绍了如何通过反射找到重载方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是一个与我之前问过的另一个问题。我有一个重载的方法:
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屋!
查看全文