Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过反射找到重载方法_C#_Generics_Reflection_Methodinfo - Fatal编程技术网

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
方法:我认为将它们结合起来将得到您想要的结果