gpt4 book ai didi

c# - 我的通用类型是一个列表,还是只是一个项目?

转载 作者:太空狗 更新时间:2023-10-29 22:17:03 26 4
gpt4 key购买 nike

我有一个采用通用参数 T 的方法。在内部,为了决定调用哪些其他方法,我需要知道(不限制它)该参数是列表还是其他东西。

我该怎么做?

我一直在用

var isList = typeof(T).Name.ToLower().Contains("list`1");

但这感觉像是一种肮脏的方法。什么更干净?

最佳答案

var type = typeof(T);
bool isList = type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>);

如果您不需要 List 的精确匹配,您也可以检查是否 typeof(IList).IsAssignableFrom(typeof(T)) ,许多类似列表的集合实现。


如果你想支持T等于IList<T2>直接(所以类型参数 T 是一个接口(interface)),那么你需要单独检查它( GetGenericTypeDefinition() 也可以返回 typeof(IList<>) )。

如果你想支持继承自任何 IList<> 的任何类型 T ,那么你必须更有创意。您必须枚举所有接口(interface),检查它们是否是通用的(如上所述),然后检查接口(interface)的通用类型是否为 IList<> .此外,由于对 Type 的 GetInterfaces() 调用仅返回顶级接口(interface),因此您需要浏览每个接口(interface)实现的所有接口(interface)(递归),以检查这些接口(interface)。丑陋,我知道。

关于c# - 我的通用类型是一个列表,还是只是一个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7046094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com