Для деревьев без выражений вы можете написать многострочные лямбда-выражения. Просто этим утром я написал что-то вроде:
var query = foo.Select(x => {
string text = x.Value;
int delimitedIndex = text.IndexOf(' ');
return int.Parse(text.Substring(0, delimitedIndex);
});
Лямбда-выражения могут быть полезны практически везде, где вы хотите создавать экземпляры делегатов с разумно простыми реализациями.
Чтобы привести еще один пример, предположим, что вы хотите запустить несколько потоков для работы с каждым из множества значений. (Давайте проигнорируем тот факт, что мы создаем много потоков - та же техника работает и для потоковых пулов.) Вы можете использовать что-то вроде:
foreach (string url in urls)
{
// Slight quirk due to variable capture semantics
string urlCopy = url;
new Thread(() => FetchUrl(urlCopy)).Start();
}
Делать это строго типизированным способом обычно сложно - есть ParameterizedThreadStart
, но это не универсально, поэтому оно становится сложным. Это довольно чистое ИМО.