Hãy nói rằng bạn đã viết một Enumerator tùy chỉnh cho đoạn code dưới đây:Visual Studio đánh giá IEnumerable như thế nào mà không vi phạm vào MoveNext của IEnumerator <T>?
public class School : IEnumerable<Student>
Và sau đó trong mã khách hàng, bạn đã làm điều này:
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" }
};
}
Sau đó, thiết lập một break-point vào phương pháp MoveNext
triển khai lớp học StudentEnumerator
của bạn.
Sau đó, khi bạn chạy mã và trình gỡ lỗi ngắt sau khi tạo truy vấn/IEnumerable trong trường hợp này và bạn mở rộng Results View
như trong hình bên dưới, Visual Studio đánh giá chuỗi như thế nào mà không vi phạm vào số MoveNext
của điều tra viên?
Tôi luôn tò mò về điều này.
Tra cứu FuncEval. Tính năng tuyệt vời với rất nhiều cảnh báo. Xem http://blogs.msdn.com/b/jmstall/archive/2005/03/23/400794.aspx –
Tuyệt vời. Vui lòng thêm câu trả lời này làm câu trả lời. Tôi sẽ đánh dấu nó là đúng. –