gpt4 book ai didi

c# - 获取已实现泛型类的泛型方法定义

转载 作者:行者123 更新时间:2023-11-30 20:58:04 25 4
gpt4 key购买 nike

public class Target3<T,T2>
{
T GetTGenericTest(T2 obj);
}

在上面的代码中,GetTGenericTest不是 GenericMethod,所以 MakeGenericMethod当然可以不使用。所以,当我有一个 MethodInfo属于 IInterfaceTarget3<string,int> 的对象,我该怎么做才能恢复到它的非定义版本?我不能只使用 MakeGenericType 因为那样我就无法链接当前的 MethodInfo到未定义的。

(伪代码以保持简短)

List<MethodInfo> undefs = new List<MethodInfo>();
void X()
{
Type t = Typeof(Target3<,>);
MethodInfo undefMi = t.GetMethod("GetTGenericTest");
undefs.Add(undefMi);
}

void Y()
{
var obj = new Target3<string,int>();
MethodInfo defMi = obj.GetType().GetMethod("GetTGenericTest");

//How to do this?
MethodInfo undefMi = undefs.FirstOrDefault(u=> defMi.UndefinedVersion() == u);
}

最佳答案

如果在泛型类中有一个非泛型方法,要将它“转换”成泛型类定义中的非泛型方法并不容易。但这可以解决问题:

MethodInfo mi1 = typeof(Target3<string, int>).GetMethod("GetTGenericTest");
MethodInfo mi2 = mi1.DeclaringType.GetGenericTypeDefinition().GetMethod(
mi.Name,
(mi.IsStatic ? BindingFlags.Static : BindingFlags.Instance) |
(mi.IsPublic ? BindingFlags.Public : BindingFlags.NonPublic),
null,
mi.GetParameters().Select(p => p.ParameterType).ToArray(),
null);

关于c# - 获取已实现泛型类的泛型方法定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16375477/

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