คุณสามารถใช้ (chainable แต่ประเมินอย่างเกียจคร้าน) Select
ก่อนอื่นให้ดำเนินการของคุณจากนั้นส่งคืนตัวตน (หรืออย่างอื่นถ้าคุณต้องการ)
IEnumerable<string> people = new List<string>(){"alica", "bob", "john", "pete"};
people.Select(p => { Console.WriteLine(p); return p; });
คุณจะต้องตรวจสอบให้แน่ใจว่ายังคงได้รับการประเมินไม่ว่าจะด้วยCount()
(การดำเนินการที่ถูกที่สุดในการระบุ afaik) หรือการดำเนินการอื่นที่คุณต้องการ
ฉันชอบที่จะเห็นมันเข้ามาในห้องสมุดมาตรฐานแม้ว่า:
static IEnumerable<T> WithLazySideEffect(this IEnumerable<T> src, Action<T> action) {
return src.Select(i => { action(i); return i; } );
}
โค้ดข้างต้นจะกลายเป็นpeople.WithLazySideEffect(p => Console.WriteLine(p))
ซึ่งเทียบเท่ากับ foreach ได้อย่างมีประสิทธิภาพ แต่ขี้เกียจและ chainable