Como esse é um dos principais resultados para "C # lambda ref" no Google; Sinto que preciso expandir as respostas acima. A sintaxe de delegado anônimo mais antiga (C # 2.0) funciona e suporta assinaturas mais complexas (além de fechamentos). Os delegados anônimos e da Lambda, no mínimo, compartilharam a implementação percebida no back-end do compilador (se não forem idênticos) - e o mais importante, eles suportam fechamentos.
O que eu estava tentando fazer quando fiz a pesquisa, para demonstrar a sintaxe:
public static ScanOperation<TToken> CreateScanOperation(
PrattTokenDefinition<TNode, TToken, TParser, TSelf> tokenDefinition)
{
var oldScanOperation = tokenDefinition.ScanOperation; // Closures still work.
return delegate(string text, ref int position, ref PositionInformation currentPosition)
{
var token = oldScanOperation(text, ref position, ref currentPosition);
if (token == null)
return null;
if (tokenDefinition.LeftDenotation != null)
token._led = tokenDefinition.LeftDenotation(token);
if (tokenDefinition.NullDenotation != null)
token._nud = tokenDefinition.NullDenotation(token);
token.Identifier = tokenDefinition.Identifier;
token.LeftBindingPower = tokenDefinition.LeftBindingPower;
token.OnInitialize();
return token;
};
}
Lembre-se de que as Lambdas são processualmente e matematicamente mais seguras (devido à promoção do valor de referência mencionada anteriormente): você pode abrir uma lata de worms. Pense com cuidado ao usar esta sintaxe.