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

IEnumerable.ForEach无输出?ChoETL扩展方法异常问题排查

问题原因

你遇到的问题核心是ChoETL库的ForEach扩展方法是延迟执行的。从它的实现代码能看到,这个方法用了yield return,属于C#的迭代器方法——这类方法不会在调用时立即执行逻辑,只有当你枚举它返回的IEnumerable<T>对象时,才会遍历源集合并执行传入的Action<T>。

你当前的代码只是调用了ForEach但没有处理它返回的序列,所以迭代器从未被触发,PromptAsmName_自然不会被调用。而Count()方法内部会枚举整个集合,所以能正确统计出程序集数量。

解决方案

有两种简单的解决方式:

  1. 强制枚举返回的序列
    在ForEach后调用ToList()或ToArray(),触发迭代器执行:

    var domain = System.AppDomain.CurrentDomain;
    domain.GetAssemblies()
         .ForEach((asm) => PromptAsmName_(asm))
         .ToList(); // 强制遍历序列,执行Action
    
    logger.Prompt($"Count of Asm({domain.FriendlyName}): {domain.GetAssemblies().Count()}");
    
  2. 改用.NET原生foreach循环
    直接用标准的foreach遍历集合,避免依赖延迟执行的扩展方法:

    var domain = System.AppDomain.CurrentDomain;
    foreach (var asm in domain.GetAssemblies())
    {
        PromptAsmName_(asm);
    }
    
    logger.Prompt($"Count of Asm({domain.FriendlyName}): {domain.GetAssemblies().Count()}");
    

内容的提问来源于stack exchange,提问作者KLc3088

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:40:04