假设您为以下代码编写了一个自定义枚举器:
public class School : IEnumerable<Student>
然后在客户端代码中,您执行了以下操作:
static void Main(string[] args)
{
var school = CreateSchoolWithStudents();
var query = from student in school
where student.Name.StartsWith("S")
select student;
Debugger.Break();
}
private static School CreateSchoolWithStudents()
{
return new School
{
new Student { Name = "Sathyaish" },
new Student { Name = "John" },
new Student { Name = "Carol" },
new Student { Name = "Peter" }
};
}
然后,在类的MoveNext
方法实现上设置一个断点StudentEnumerator
。
然后,在这种情况下,当您运行代码并在构造查询/ IEnumerable之后调试器中断,并Results View
在下图中扩展了类似内容时,Visual Studio如何评估序列而不破坏其枚举数MoveNext
?
我一直对此感到好奇。
Visual Studio使用称为FuncEval的功能,该功能基本上可以让IDE运行您的代码。这启用了许多不错的功能,但是显然有很多注意事项。示例包括对属性的副作用,死锁,跳过循环步骤以及怪异的调试体验。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句