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
相关产品推荐
相关产品推荐

