C# 如何通过反射找到重载方法
这是一个与之相关的问题。我有一个重载方法:C# 如何通过反射找到重载方法,c#,generics,reflection,methodinfo,C#,Generics,Reflection,Methodinfo,这是一个与之相关的问题。我有一个重载方法: public void Add<T>(SomeType<T> some) { } public void Add<T>(AnotherType<T> another) { } public void Add(SomeType some){ public void Add(另一个类型另一个){} 如何通过反射找到每种方法?e、 g.如何通过反射获得Add(SomeType some)方法?你能帮我吗?
public void Add<T>(SomeType<T> some) { }
public void Add<T>(AnotherType<T> another) { }
public void Add(SomeType some){
public void Add(另一个类型另一个){}
如何通过反射找到每种方法?e、 g.如何通过反射获得
Add(SomeType some)
方法?你能帮我吗?提前感谢。查看MethodInfo成员:
有
IsGenericMethodDefinition
和GetParameters
的帮助器属性。这两种方法都可以帮助您了解什么是函数。这里的技巧是描述您希望参数是SomeType
,其中T
是Add
方法的泛型
除此之外,它只是关于使用标准反射,就像卡斯特罗克斯在他的回答中建议的那样
我是这样做的:
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();
var themethodieek=typeof(MyClass).GetMethods()
.Where(m=>m.Name==“添加”&&m.IsGenericMethodDefinition)
.其中(m=>
{
//泛型T型
var typeT=m.GetGenericArguments()[0];
//某物
var someTypeOfT=
typeof(SomeType).MakeGenericType(new[]{typeT});
返回m.GetParameters().First().ParameterType==someTypeOfT;
})
.First();
对不起,还有一点。如何检测类型是否遵循泛型类型的约束?使用调试器查看typeof(SomeType).GetGenericArguments().First().GetGenericParameterConstraints()
,并查看type.IsAssignableFrom
方法:我认为将它们结合起来将得到您想要的结果