I am trying to step through the following IEnumerable extension method that I called DumpIt. The debugger will not step through it. How can I get the debugger to step into this extension method?
My unit test:
[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);
}
The extension method:
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;
}
}
Thanks for any help!
When using yield
, you are using delayed execution. The other LINQ methods you are using use delayed execution as well. The DumpIt method won't actually get called until you start enumerating your result
in TestDumpIt
. If you want to see the code get called, you need to enumerate the enumerable. For example, you could just add a result.ToList()
at the end to force enumeration.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With