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

如何遍历实际为任意类型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);
    }
}

关键说明

  1. 无需单独判断每种List的原因:所有泛型List<T>都实现了IEnumerable接口,不管元素是string、int还是其他预定义类型,都能通过IEnumerable统一遍历,完全不用针对每种类型写重复的foreach逻辑。
  2. 模式匹配的优势:C# 7.0及以上支持的is模式匹配,能在判断类型的同时完成转换,代码简洁且避免了as转换后判空的繁琐操作。
  3. 严格限定只处理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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 02:32:27