Ponieważ jest to jeden z najlepszych wyników dla "C# lambda ref" w Google; Uważam, że muszę rozwinąć powyższe odpowiedzi. Starsza (C# 2.0) anonimowa składnia delegatów działa i obsługuje bardziej złożone sygnatury (i zamknięcia). Delegaci Lambdy i anonimowi przynajmniej dzielili się postrzeganą implementacją w zapleczu kompilatora (jeśli nie są identyczni) - i co najważniejsze, obsługują zamknięcia.
Co starałem się robić, kiedy robiłam poszukiwania, w celu wykazania składnię:
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;
};
}
Wystarczy pamiętać, że lambdas są proceduralnie i matematycznie bezpieczniejsze (ze względu na promocję wartości ref wspomniano wcześniej): możesz otworzyć puszkę z robakami. Zastanów się dobrze, używając tej składni.
Mogę zapytać, co było obejście, które miały znaleźć? – Beatles1692
Chodzi o iteratory, ale wiele z tego samego uzasadnienia w tym poście (również Eric Lippert — jest on w końcu w zespole projektowania języka) dotyczy lambdas: –