Вы можете использовать как лямбда, так и анонимный синтаксис делегата - достаточно указать тип аргумента и пометить его как:
public delegate bool CutoffDateDelegate( out DateTime cutoffDate );
// using lambda syntax:
CutoffDateDelegate d1 =
(out DateTime dt) => { dt = DateTime.Now; return true; };
// using anonymous delegate syntax:
CutoffDateDelegate d2 =
delegate( out DateTime dt ) { dt = DateTime.Now; return true; }
Хотя явное объявление аргументов как ref/out ожидается, объявление типов аргументов в выражении лямбда встречается реже, так как компилятор обычно может их вывести. В данном случае, однако, компилятор в настоящее время не делает выводов о типах аргументов out или ref в лямбда/анонных выражениях. Я не уверен, является ли такое поведение ошибкой/переосмыслением, или есть языковая причина, по которой это должно быть так, но есть достаточно простой обходной путь.
EDIT: Я сделал быструю проверку в VS2010 β2, и все равно похоже, что нужно определить типы аргументов - они не выведены для C# 4.
.