2010-12-07 27 views
3

我已经打了封闭位在C#中,甚至写他们生产规范的应用程序,但是,我还是那个我,这个问题必须是大喊,或者可以是,通过使用封闭来解决。方案时要使用闭合

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

感谢

回答

6

鉴于闭包是一个编译器的功能,而不是一个平台的功能,没有什么这不能他们来完成。你可以手动编写所有编译器使用的代码(当涉及到表达式树,编译器可以访问某些IL语言没有公开的指令时)。

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

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

即lambda表达式是一个闭合,从委托内访问age

至于陷阱:

+1

封闭的任何性能优势?另外,为什么我会生气,不要在LINQ中使用闭包?虽然,我想没有其他真正的方法来访问LINQ中的包含变量的代码示例。 – dotnetdev 2010-12-07 21:59:25