这是与another question I asked before相关的问题。我有一个重载的方法:
public void Add<T>(SomeType<T> some) { }
public void Add<T>(AnotherType<T> another) { }
如何通过反射找到每种方法?例如如何通过反射获得Add<T>(SomeType<T> some)
方法?你能帮我吗?提前谢谢。
答案 0 :(得分: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();
答案 1 :(得分:0)
查看MethodInfo成员:http://msdn.microsoft.com/en-US/library/system.reflection.methodinfo_members(v=vs.80).aspx
IsGenericMethodDefinition
和GetParameters
有辅助属性。两者都可以帮助你弄清楚什么是什么功能。