如何遍历实际为任意类型List<>的object对象?
解决方案
你遇到的核心问题是直接遍历object类型变量会编译失败,因为编译器无法识别它是可枚举集合。通过模式匹配转换为可枚举接口的方式,就能统一处理所有List<T>类型,彻底避免重复代码:
using System.Collections; public void MyFunc(object value) { // 利用模式匹配,直接将value转换为IEnumerable接口 if (value is IEnumerable enumerable) { foreach (var item in enumerable) { HandleArg(item); // 直接传递object类型元素给处理函数 } } else { HandleArg(value); } }
关键说明
- 无需单独判断每种List
的原因 :所有泛型List<T>都实现了IEnumerable接口,不管元素是string、int还是其他预定义类型,都能通过IEnumerable统一遍历,完全不用针对每种类型写重复的foreach逻辑。 - 模式匹配的优势:C# 7.0及以上支持的
is模式匹配,能在判断类型的同时完成转换,代码简洁且避免了as转换后判空的繁琐操作。 - 严格限定只处理List
的方案 :如果需要排除ArrayList、数组等其他IEnumerable实现,可改用以下判断逻辑:if (value != null && value.GetType().IsGenericType && value.GetType().GetGenericTypeDefinition() == typeof(List<>)) { var enumerable = (IEnumerable)value; foreach (var item in enumerable) { HandleArg(item); } }
内容的提问来源于stack exchange,提问作者user31939286
相关产品推荐
相关产品推荐

