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

C#如何获取ICollection<T>等泛型类型的实际内部类型参数T?

解决方案

当泛型参数T是ICollection<test11>这类构造泛型类型时,可以通过Type类的GetGenericArguments()方法获取其内部的泛型参数类型,具体操作如下:

核心代码实现

protected virtual async System.Threading.Tasks.Task<ObjectResponseResult<T>> ReadObjectResponseAsync<T>()
{
    Type typeParameterType = typeof(T);
    Type innerType = null;
    // 判断当前类型是否为构造泛型类型
    if (typeParameterType.IsGenericType && !typeParameterType.IsGenericTypeDefinition)
    {
        // 获取泛型参数列表,ICollection<test11>的第一个泛型参数就是目标test11类型
        var genericArguments = typeParameterType.GetGenericArguments();
        if (genericArguments.Length > 0)
        {
            innerType = genericArguments[0];
            // 此处innerType即为你需要的test11类型,可直接用于后续反射、序列化等操作
        }
    }

    // 原有业务逻辑
    var x = "{'search':'t','content':[{'id':'2cdc66f1-0000-0000-39ac-233c00000000'}]}";
    var typedBody = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(x);
    // .....
}

补充说明

  • 如果是多层嵌套的泛型,比如ICollection<List<test11>>,只需要多次调用GetGenericArguments()逐层提取即可
  • 若需要兼容未直接指定泛型参数的非泛型集合类型,可以额外增加逻辑,从类型实现的接口列表中提取对应的泛型参数

内容的提问来源于stack exchange,提问作者Willie Cheng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:27:02