gpt4 book ai didi

c# - 如何从封闭类型的 MethodInfo 获取开放泛型类型的 MethodInfo

转载 作者:太空狗 更新时间:2023-10-29 17:55:10 26 4
gpt4 key购买 nike

假设我有这样一个类:

public class MyClass<T>
{
public void Foo(T t)
{
}
}

现在,假设我有一个 MyClass<int> 的实例和一个 MethodInfo它的 Foo方法。打电话methodInfo.GetParameters()将返回 ParameterInfo有一个条目的数组,引用类型 int .我的问题是,如果该参数声明为 int,我似乎无法找出答案。在类里面或作为T .

我想达到什么目的?
在运行时,我想阅读 MethodInfo 指定的方法的文档来自 Visual Studio 生成的 XML Doc 文件。
对于上面定义的方法,关键是这样的:

<namespace>.MyClass`1.Foo(`0)

`0引用声明类的第一个泛型类型参数。为了能够构造此字符串,我需要以某种方式获取此信息。
但是怎么做呢? MethodInfo似乎不包含该信息...

最佳答案

关键好像是Type.ContainsGenericParameters关于参数类型:

给定

public class MyClass<T>
{
public void Foo(T t)
{
}

public void Bar(int i)
{

}
}

然后

class Program
{
static void Main(string[] args)
{
var obj = new MyClass<int>();

// Closed type
var closedType = obj.GetType();

// Open generic (typeof(MyClass<>))
var openType = closedType.GetGenericTypeDefinition();

// Methods on open type
var fooT = openType.GetMethod("Foo");
var barint = openType.GetMethod("Bar");

// Parameter types
var tInFoo = fooT.GetParameters()[0].ParameterType;
var iInBar = barint.GetParameters()[0].ParameterType;

// Are they generic?
var tInFooIsGeneric = tInFoo.ContainsGenericParameters;
var iInBarIsGeneric = iInBar.ContainsGenericParameters;

Console.WriteLine(tInFooIsGeneric);
Console.WriteLine(iInBarIsGeneric);

Console.ReadKey();
}
}

输出

True
False

这显然需要更多的重载等工作。

关于c# - 如何从封闭类型的 MethodInfo 获取开放泛型类型的 MethodInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13108519/

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