Оскільки це один із найкращих результатів для "C # lambda ref" в Google; Я вважаю, що мені потрібно розширити відповіді на вищезазначені. Старіший (C # 2.0) анонімний синтаксис делегата працює, і він підтримує більш складні підписи (а також закриття). Делегати Лембди та анонімні делегати принаймні поділилися сприйнятою реалізацією в архіві компілятора (якщо вони не ідентичні) - і найголовніше, що вони підтримують закриття.
Що я намагався зробити під час пошуку, щоб продемонструвати синтаксис:
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;
};
}
Пам’ятайте лише про те, що лямбдас є безпечнішими з точки зору процедур та математики (через вищезгадане просування посилань): ви можете відкрити балончиків. Ретельно подумайте, використовуючи цей синтаксис.