gpt4 book ai didi

c# - 如何获取泛型方法的 MethodInfo?

转载 作者:太空宇宙 更新时间:2023-11-03 20:47:13 25 4
gpt4 key购买 nike

我正在尝试获取 MethodInfo方法的对象:

Any<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>)

我遇到的问题是如何为 Func<TSource, Boolean> 指定类型参数有点……

MethodInfo method = typeof(Enumerable).GetMethod("Any", new[] { typeof(Func<what goes here?, Boolean>) });

感谢帮助。

最佳答案

您可以创建一个扩展方法来执行检索所有方法并过滤它们的工作,以便返回所需的通用方法。

public static class TypeExtensions
{
private class SimpleTypeComparer : IEqualityComparer<Type>
{
public bool Equals(Type x, Type y)
{
return x.Assembly == y.Assembly &&
x.Namespace == y.Namespace &&
x.Name == y.Name;
}

public int GetHashCode(Type obj)
{
throw new NotImplementedException();
}
}

public static MethodInfo GetGenericMethod(this Type type, string name, Type[] parameterTypes)
{
var methods = type.GetMethods();
foreach (var method in methods.Where(m => m.Name == name))
{
var methodParameterTypes = method.GetParameters().Select(p => p.ParameterType).ToArray();

if (methodParameterTypes.SequenceEqual(parameterTypes, new SimpleTypeComparer()))
{
return method;
}
}

return null;
}
}

使用上面的扩展方法,您可以编写类似于您预期的代码:

MethodInfo method = typeof(Enumerable).GetGenericMethod("Any", new[] { typeof(IEnumerable<>), typeof(Func<,>) });

关于c# - 如何获取泛型方法的 MethodInfo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/326136/

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