2010-12-07 6 views
3

나는 C#으로 폐쇄와 비트를 연주하고 심지어 그러나 아무것도 정말이 문제 해야한다는 나에게 소리 쳤다 없다 생산 - 투기 응용 프로그램에서 그들을 작성 또는 이 될 수했습니다 클로저를 사용하여 해결되었습니다.시나리오

클로저가 특히 유용 할 때 문제가 있습니까? 또한 C# 4.0에 클로저가있는 문제가 있습니까?

감사

답변

6

그들과 함께 할 수 없습니다 수 아무것도, 클로저 컴파일러 기능보다는 플랫폼 기능입니다 감안할.

컴파일러가 손으로 사용하는 모든 코드를 작성할 수 있습니다 (물론, 표현식 트리와 컴파일러가 언어에 노출되지 않은 일부 IL 명령어에 액세스 할 수 있음).

그러나 이 아니므로 바깥 쪽 변수에 대한 액세스가 필요한 LINQ에서 클로저를 사용하는 것이 좋습니다. 람다 식 대리자 내에서 age 액세스하는 고정이다

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

한다 : 예를 들어. 개는에 관해서는

:

+1

모든 성능 혜택 ? 또한 LINQ에서 클로저를 사용하지 않는 것이 왜 나는 미친 짓인가? 비록, 그 코드 샘플의 요구 사항과 함께 LINQ에서 변수를 둘러싸는 것에 접근하는 다른 방법은 없다고 생각합니다. – dotnetdev

+2

@dotnetdev : 대안은 컴파일러가하는 것처럼 많은 여분의 클래스를 만드는 것입니다. 바이 바이, 가독성. 물론 동일한 코드이기 때문에 성능은 동일합니다. –

+0

나중에. 감사. 클로저가 확실한 옵션이라고 생각합니다. – dotnetdev