我试图通过我称为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);
}
Run Code Online (Sandbox Code Playgroud)
扩展方法:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
使用时yield,您正在使用延迟执行.您正在使用的其他LINQ方法也使用延迟执行.在你开始枚举你的resultin 之前,DumpIt方法实际上不会被调用TestDumpIt.如果要查看代码被调用,则需要枚举可枚举代码.例如,您可以result.ToList()在末尾添加一个强制枚举.
| 归档时间: |
|
| 查看次数: |
1136 次 |
| 最近记录: |