Como este es uno de los mejores resultados para "C # lambda ref" en Google; Siento que necesito ampliar 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). Los delegados anónimos y de Lambda, como mínimo, han compartido la implementación percibida en el backend del compilador (si no son idénticos), y lo más importante, apoyan los cierres.
Lo que estaba tratando de hacer cuando 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;
};
}
Solo tenga en cuenta que Lambdas es más seguro desde el punto de vista matemático y de procedimiento (debido a la promoción del valor de referencia mencionado anteriormente): puede abrir una lata de gusanos. Piensa cuidadosamente cuando uses esta sintaxis.