首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在GenericTypeParameters中访问泛型类型的C#

在GenericTypeParameters中访问泛型类型的C#
EN

Stack Overflow用户
提问于 2016-12-23 21:39:59
回答 1查看 683关注 0票数 3

我想用它们声明的参数名生成泛型类的名称。例如,如果我有泛型类和实例化类,如下面所示,我希望打印"MyClass<P1,M>"

代码语言:javascript
运行
复制
class MyClass<P1, M1> {}
// ... some code removed here
var myInstance = new MyClass<int,string>();

现在我得到了myInstance的类型信息,然后是泛型类型定义,如下所示:

代码语言:javascript
运行
复制
// 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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-23 21:42:24

我认为您只是在寻找Type.GetGenericArguments,您应该调用genericType而不是type --此时,类型“参数”实际上是类型参数,因为它是一个开放类型。

示例(为简单起见使用Dictionary<,> ):

代码语言:javascript
运行
复制
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);
        }
    }
}

希望有了这些信息,您可以自己计算出字符串、格式等。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41308146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档