IEnumerable.ForEach无输出?ChoETL扩展方法异常问题排查
问题原因
你遇到的问题核心是ChoETL库的ForEach扩展方法是延迟执行的。从它的实现代码能看到,这个方法用了yield return,属于C#的迭代器方法——这类方法不会在调用时立即执行逻辑,只有当你枚举它返回的IEnumerable<T>对象时,才会遍历源集合并执行传入的Action<T>。
你当前的代码只是调用了ForEach但没有处理它返回的序列,所以迭代器从未被触发,PromptAsmName_自然不会被调用。而Count()方法内部会枚举整个集合,所以能正确统计出程序集数量。
解决方案
有两种简单的解决方式:
强制枚举返回的序列
在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()}");改用.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
相关产品推荐
相关产品推荐

