Я получаю основные принципы замыканий и лямбда-выражений, но я пытаюсь обмануть то, что происходит за кулисами, и когда это/нецелесообразно использовать их в моем коде. Рассмотрим следующий пример, который берет набор имен и возвращает любые имена, начинающиеся с буквы 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));
}
Во-первых, есть ли более прямой способ, которым я мог бы написать это выражение? Во-вторых, не "FindAll" собирается выделить память для новой коллекции, содержащей соответствующие элементы? Я определенно вижу, что синтаксис более изящный, но я хочу убедиться, что я не буду заниматься проблемами производительности позже по дороге при работе с большими коллекциями. Компилятор делает некоторую оптимизацию voodoo за кулисами, что делает мои проблемы недействительными?