You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取C#泛型类中泛型类型参数的名称?

获取泛型类定义时的类型参数名称

别用StreamReader读取源码这种绕路的方式啦,.NET的反射API完全能高效解决这个问题——你需要先拿到泛型类型的原始定义,再从中提取类型参数的名称。

核心思路

当你用typeof(MyClass<int>)拿到的是构造后的泛型类型(已经绑定了具体类型int),而我们需要的是它的泛型定义(也就是MyClass<>,还没绑定具体类型的版本)。通过反射获取这个定义后,就能拿到定义时声明的类型参数名称。

实现扩展方法

我们可以给Type类写一个扩展方法,方便直接调用:

using System;
using System.Linq;

public static class TypeExtensions
{
    // 单泛型参数的情况,返回第一个类型参数的名称
    public static string GetTypeParameterName(this Type type)
    {
        // 先检查是不是泛型类型
        if (!type.IsGenericType)
            throw new ArgumentException("类型必须是泛型类型");
            
        // 获取泛型定义(比如从MyClass<int>拿到MyClass<>)
        var genericDefinition = type.GetGenericTypeDefinition();
        // 获取定义时的泛型参数,这里取第一个(适合单参数的情况)
        var typeParameter = genericDefinition.GetGenericArguments()[0];
        
        // 返回参数的名称,就是你要的"Type1"
        return typeParameter.Name;
    }
    
    // 可选:多泛型参数的情况,返回所有参数名称的列表
    public static string[] GetTypeParameterNames(this Type type)
    {
        if (!type.IsGenericType)
            throw new ArgumentException("类型必须是泛型类型");
            
        var genericDefinition = type.GetGenericTypeDefinition();
        return genericDefinition.GetGenericArguments()
                               .Select(t => t.Name)
                               .ToArray();
    }
}

测试代码

和你的示例完全匹配:

class MyClass<Type1> { public Type data; }

static void Main()
{
    // 输出:Type1
    Console.WriteLine(typeof(MyClass<int>).GetTypeParameterName());
    
    // 如果是多参数的情况
    class MultiGeneric<TFirst, TSecond> { }
    // 输出:TFirst, TSecond
    Console.WriteLine(string.Join(", ", typeof(MultiGeneric<string, int>).GetTypeParameterNames()));
}

关键说明

  • GetGenericTypeDefinition():将构造后的泛型类型转换为其原始的泛型定义,这一步是核心,因为只有定义里的类型参数才保留着你声明的名称(比如Type1)。
  • GetGenericArguments():在泛型定义上调用时,返回的是定义时的类型参数(不是实际传入的具体类型),它的Name属性就是你要的字符串。

这种方法完全不需要读取源码,纯反射实现,高效又可靠。

内容的提问来源于stack exchange,提问作者Tᴏᴍᴇʀ Wᴏʟʙᴇʀɢ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:44:32