Obtengo los principios básicos de cierres y expresiones lambda, pero estoy tratando de hacerme a la idea de lo que está sucediendo detrás de escena y cuándo es/no es práctico usarlos en mi código. Considere el ejemplo siguiente, que tiene una colección de nombres y devuelve los nombres que comienzan con la letra C ...Cierres y Lambda en 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));
}
En primer lugar, hay una manera más directa que podría haber escrito esta expresión? En segundo lugar, ¿no se va a asignar "FindAll" a la memoria de una nueva colección que contiene los elementos coincidentes? Definitivamente veo que la sintaxis es más elegante, pero quiero asegurarme de que no estoy entrando en problemas de rendimiento más adelante cuando trabaje con colecciones más grandes. ¿El compilador hace algo de vudú de optimización detrás de las escenas que hace que mis preocupaciones sean inválidas?
Ok, tal vez todavía no entiendo los fundamentos de los cierres. Sin embargo, todas las respuestas que obtuve aquí son excelentes y me muevo un poco más adelante ... gracias a todos. – lJohnson
Eso me explica la diferencia entre los cierres y lambda: "no hay cierre en ese código, porque no hay una variable local para capturar". – TLDR