4

我正在尝试逐步执行以下我称为 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;
    }
}

谢谢你的帮助!

4

1 回答 1

10

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

于 2012-10-30T13:48:49.140 回答