我正在尝试逐步完成以下我称为 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/