我想用它们声明的参数名生成泛型类的名称。例如,如果我有泛型类和实例化类,如下面所示,我希望打印"MyClass<P1,M>"
。
class MyClass<P1, M1> {}
// ... some code removed here
var myInstance = new MyClass<int,string>();
现在我得到了myInstance
的类型信息,然后是泛型类型定义,如下所示:
// MyClass<int,string> type info here
var type = myInstance.GetType();
// MyClass<P1, M1> type info here
var genericType = type.GetGenericTypeDefinition();
调试器显示带有所有参数名称和类型信息的genericType
属性GenericTypeParameters。但是,我无法从C#代码访问该集合,并且将genericType
转换为System.RuntimeType类无法工作,因为RuntimeType是内部的。
那么,是否有一种方式来访问GenericTypeParameters属性,还是我在这里?环境VS2015,.NET 4.6.1
发布于 2016-12-23 21:42:24
我认为您只是在寻找Type.GetGenericArguments
,您应该调用genericType
而不是type
--此时,类型“参数”实际上是类型参数,因为它是一个开放类型。
示例(为简单起见使用Dictionary<,>
):
using System;
using System.Collections.Generic;
class Test
{
static void Main()
{
var dictionary = new Dictionary<string, int>();
var type = dictionary.GetType();
var genericType = type.GetGenericTypeDefinition();
foreach (var typeArgument in genericType.GetGenericArguments())
{
// TKey, then TValue
Console.WriteLine(typeArgument);
}
}
}
希望有了这些信息,您可以自己计算出字符串、格式等。
https://stackoverflow.com/questions/41308146
复制相似问题