gpt4 book ai didi

c# - 类使用泛型和泛型类型参数时如何获取正确的MethodInfo对象

转载 作者:太空狗 更新时间:2023-10-29 19:37:58 25 4
gpt4 key购买 nike

我想知道是否有人可以演示如何使用 Type 的 GetMethod() 方法为以下签名检索 MethodInfo 对象:

Class.StaticMethod<T>(T arg1, IInterface1 arg2, IEnumerable<IInterface2> arg3)

谢谢,

夏姆

最佳答案

MethodInfo methodInfo = typeof(Class)
.GetMethods(
BindingFlags.Public | BindingFlags.Static
)
.Where(m => m.Name == "StaticMethod")
.Where(m => m.IsGenericMethod)
.Where(m => m.GetGenericArguments().Length == 1)
.Where(m => m.GetParameters().Length == 3)
.Where(m =>
m.GetParameters()[0].ParameterType ==
m.GetGenericArguments()[0] &&
m.GetParameters()[1].ParameterType ==
typeof(IInterface1) &&
m.GetParameters()[2].ParameterType ==
typeof(IEnumerable<IInterface2>)
)
.Single();

请注意,您必须在后面加上

methodInfo = methodInfo.MakeGenericMethod(new Type[] { typeof(ConcreteType) });

关闭类型,其中 ConcreteType 是类型参数 T 所需的类型。

我假设:

class Class {
public static void StaticMethod<T>(
T arg1,
IInterface1 arg2,
IEnumerable<IInterface2> arg3
) { }
}

关于c# - 类使用泛型和泛型类型参数时如何获取正确的MethodInfo对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4551532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com