我已经在C#中玩过闭包,甚至在生产级别的应用中编写了它们,但是,没有什么事情真正地告诉我这个问题 必须 或者只能使用闭包来解决。 是否有任何问题可以特别适用于使用闭包来解决?另外,在C# 4.0中使用闭包时有什么需要注意的问题吗? 谢谢
考虑到闭包是编译器功能而不是平台功能,因此没有什么是不能用它们完成的。您可以手动编写编译器使用的所有代码(好吧,在涉及表达式树时有一些例外情况,并且编译器可以访问某些语言未公开的IL指令)。但是,在需要访问封闭变量的LINQ中不使用闭包是疯狂的。例如:public List<Person> FilterByAge(IEnumerable<Person> people, int age) { return people.Where(p => p.Age >= age).ToList(); } 那个 lambda 表达式是一个闭包,从委托中访问 age。至于需要注意的事项: 闭合循环变量被认为是有害的 泛型协变与组合委托不兼容 理解所有内容 :)