Попробуем раскрыть, чтобы тебе стало понятнее.
Представь, что метод SelectMany принимает в качестве параметра следующий метод:
public IEnumerable<char> Func(string s)
{
return s;
}
Здесь происходит неявное преобразование строки в перечисление символов.
Затем опишем точно такой же метод с помощью стрелочной функции на основе делегата:
Func<string, IEnumerable<char>> func = (string s) =>
{
return s;
};
Теперь немного сократим это, опустив очевидные для компилятора значения:
Func<string, IEnumerable<char>> func = s =>
{
return s;
};
А теперь, по правилам C#, если код внутри { } однострочный - то можно убрать { }, при этом return уже больше не нужен:
Func<string, IEnumerable<char>> func = s => s;
Аналогом такого делагата будет метод:
public IEnumerable<char> Func(string s) => s;