currentVideoGames.Where(Filter)
это просто сокращение для:
currentVideoGames.Where(new Func<string, bool>(Filter))
То есть компилятор видит, что у вас есть метод, который принимает тип делегата Func<string, bool>
, он видит, что вы его передаетеметод с сигнатурой bool Filter(string)
(строго, группа методов с одной или несколькими перегрузками, одна из которых имеет достаточно близкую сигнатуру), и он автоматически вставляет код для создания экземпляра нового делегата.
Эта же языковая функция позволяет писать такие вещи, как:
SomeEvent += Handler;
вместо:
SomeEvent += new EventHandler(Handler);
См. Это на SharpLab .
Аналогично:
currentVideoGames.Where(game => game.Contains(" "))
- это сокращение от:
currentVideoGames.Where(new Func<string, bool>(CompilerGeneratedFunction))
, где CompilerGeneratedFunction
будет выглядеть примерно так:
bool CompilerGeneratedFunction(string x)
{
return x.Contains(" ");
}
Смотрите это на SharpLab . Случается, что компилятор помещает CompilerGeneratedFunction
(который он назвал <M>b__0_0
) в новый внутренний класс, и он кэширует Func<string, bool>
, который он создает для повышения производительности.