如何获取元组列表中元组的参数个数?
解决列表中值元组的参数个数获取问题
你之前直接对List类型调用GetGenericArguments没用,是因为这个方法返回的是列表的泛型参数(也就是那个值元组类型本身),而不是元组的参数。要拿到元组的参数个数,得先提取出列表的泛型元素类型(值元组),再对这个元组类型做处理。
方法一:反射获取(运行时通用方案)
假设你已经有了列表的实例carList,可以这样写:
// 获取列表的类型 var listType = carList.GetType(); // 提取列表的泛型元素类型——也就是值元组的类型 var tupleType = listType.GetGenericArguments()[0]; // 获取值元组的参数个数 int paramCount = tupleType.GetGenericArguments().Length; // 此时paramCount的值就是2,对应你的元组(DateTime cardate, string brand)的两个参数
方法二:编译时直接获取(已知元组类型时)
如果在代码里已经明确知道元组的具体类型,也可以直接通过元组类型来获取:
int paramCount = typeof((DateTime, string)).GetGenericArguments().Length; // 结果同样是2
补充说明
值元组的底层是ValueTuple<T1, T2, ...>泛型类型,所以它的GetGenericArguments()返回的就是各个参数的类型数组,数组长度就是参数个数。你也可以通过tupleType.GetFields().Length来获取,因为每个值元组参数对应一个公开字段(比如Item1、Item2,命名元组的字段名只是别名),结果是一致的。
内容的提问来源于stack exchange,提问作者another J.Doe
相关产品推荐
相关产品推荐

