Este es uno de los primeros resultados de "C# lambda ref" en Google; Siento que necesito expandir las respuestas anteriores. La sintaxis de delegado anónimo más antigua (C# 2.0) funciona y admite firmas más complejas (así como cierres). Por lo menos, los delegados de Lambda y anónimos han compartido la implementación percibida en el backend del compilador (si no son idénticos), y lo más importante, admiten los cierres.
Lo que estaba tratando de hacer cuando lo hice la búsqueda, para demostrar la sintaxis:
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;
};
}
Hemos de tener en cuenta que Lambdas son procesal y matemáticamente más seguro (a causa de la promoción valor de referencia se mencionó anteriormente): puedes abrir una lata de gusanos. Piense con cuidado cuando use esta sintaxis.
puedo preguntar cuál era la solución que había encontró ? – Beatles1692
Se trata de iteradores, pero gran parte del mismo razonamiento en esta publicación (también por Eric Lippert — él está en el equipo de diseño de idiomas) se aplica a lambdas: –