클로저 및 람다 식의 기본 원칙을 얻지 만 장면 뒤에서 무슨 일이 일어나고 있는지, 내 코드에서 사용하는 것이 실용적이지 않은지에 대해 생각하고 있습니다.클로저 및 C#의 람다
static void Main(string[] args)
{
List<string> names = new List<string>();
names.AddRange(new string[]
{
"Alan", "Bob", "Chris", "Dave", "Edgar", "Frank"
});
names.FindAll(x => x.StartsWith("C")).ForEach(
i => Console.WriteLine(i));
}
먼저 ... 이름의 컬렉션을 취하고 문자 C로 시작하는 모든 이름을 반환 다음 예를 고려, 나는이 표현을 쓴 수있는보다 직접적인 방법은 무엇입니까? 둘째, "FindAll"이 일치하는 항목을 보유하는 새 모음에 대한 메모리를 할당하지 않습니까? 나는 문법이 더 우아하다는 것을 분명히 알지만, 큰 컬렉션을 가지고 작업 할 때 나중에 성능 문제에 봉착하지 않도록하고 싶다. 컴파일러는 내 관심사가 무효화되는 장면에서 몇 가지 최적화 부두를 수행합니까?
좋아, 그럼 아마 아직 폐쇄의 기초를 얻지 못했을 것입니다. 그럼에도 불구하고, 여기에있는 모든 대답은 훌륭하고 길을 조금 더 멀리 이동합니다 ... 모두들 감사합니다. – lJohnson
클로저와 람다의 차이점은 "캡처 할 로컬 변수가 없으므로 해당 코드가 닫히지 않습니다."입니다. – TLDR