何时使用闭包的场景

Gur*_*epS 3 c# closures

我在C#中使用了一些闭包,甚至在生产规范的应用程序中编写它们,然而,没有什么能真正对我说这个问题必须是,或者只能通过使用闭包来解决.

闭包对解决问题特别有用吗?另外,C#4.0中有没有关闭的问题?

谢谢

Jon*_*eet 6

鉴于闭包是一个编译器功能而不是一个平台功能,没有什么是不能用它们完成的.

您可以手动编写编译器使用的所有代码(当涉及到表达式树时,有一些例外,编译器可以访问一些未被语言公开的IL指令).

但是,你不会在LINQ中使用闭包,你需要访问封闭变量.例如:

public List<Person> FilterByAge(IEnumerable<Person> people, int age)
{
    return people.Where(p => p.Age >= age).ToList();
}
Run Code Online (Sandbox Code Playgroud)

lambda表达式是一个闭包,age从委托中访问.

至于陷阱:

  • @dotnetdev:另一种方法是像编译器一样创建一堆额外的类.再见,可读性.当然,性能是相同的,因为它是相同的代码. (2认同)