通过 IEnumerable 扩展方法进行 C# LINQ 调试

标签 c# linq debugging

我正在尝试逐步完成以下我称为 DumpIt 的 IEnumerable 扩展方法。调试器不会单步执行它。我怎样才能让调试器进入这个扩展方法?

我的单元测试:

[Test]
        public void TestDumpIt()
        {
            var words =
                new string[] {"   KOOKABURRA", "Frogmouth", "kingfisher   ", "loon", "merganser"};

            var result = words
                .DumpIt(d => "original: " + d)
                .Select(word => word.Trim())
                .DumpIt(d => "trimmed: " + d)
                .Select(word => word.ToLower())
                .DumpIt(d => "lower cased: " + d)
                .Where(word => word.StartsWith("k"))
                .DumpIt(d => "starts with k: " + d)
                .OrderBy(word => word)
                .DumpIt(d => "orderd: " + d);
        }

扩展方法:

public static IEnumerable<T> DumpIt<T>(this IEnumerable<T> input,
    Func<T, string> toString
    )
{
    foreach (var item in input)
    {
        Output.ActivePane.Activate();
        Output.ActivePane.OutputString(
            ShowWhiteSpace ? '[' + toString(item) + ']' : toString(item));

        yield return item;
    }
}

感谢您的帮助!

最佳答案

当使用 yield 时,您正在使用延迟执行。您使用的其他 LINQ 方法也使用延迟执行。在您开始在 TestDumpIt 中枚举您的 result 之前,实际上不会调用 DumpIt 方法。如果你想看到代码被调用,你需要枚举可枚举的。例如,您可以在末尾添加 result.ToList() 以强制枚举。

关于通过 IEnumerable 扩展方法进行 C# LINQ 调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13139908/

相关文章:

c# - 没有行时如何处理 CopyToDataTable()?

c# - 使用模板和字段将新页面添加到 iTextSharp 的 PdfStamper

c# - Null 合并在 LINQ 查询中不起作用

c# - 在这种情况下,如何通过使用 lambda 或 linq 来避免使用嵌套的 foreach 语句?

c - 仅使用 valgrind 分析部分函数和子函数

python - 使用 pdb 调试 flask

c# - 在 C# 中将一种任意类型转换为另一种类型的通用方法

c# - MVC 中的下拉菜单

c# - 在 LINQ 中求和

gdb 可以进入 if 的条件函数吗?