我在C#中使用了一些闭包,甚至用生产规范的应用程序编写了它们,然而,没有什么能真正地喊我这个问题必须,或者只能 ,使用闭包解决。
闭包对解决问题特别有用吗?另外,C#4.0中是否有关闭的问题?
由于
答案 0 :(得分:6)
鉴于闭包是一个编译器功能而不是平台功能,无法完成任何操作。
您可以编写编译器手动使用的所有代码(当涉及表达式树时,有一些例外,编译器可以访问一些未被语言公开的IL指令)。
但是,你很难 在LINQ中使用闭包,你需要访问封闭变量。例如:
public List<Person> FilterByAge(IEnumerable<Person> people, int age)
{
return people.Where(p => p.Age >= age).ToList();
}
该lambda表达式是一个闭包,从委托中访问age
。
至于陷阱: