Bu, Google'da "C# lambda ref" için en iyi sonuçlardan biri olduğundan; Yukarıdaki cevapları genişletmem gerektiğini hissediyorum. Daha eski (C# 2.0) anonim delege sözdizimi çalışır ve daha karmaşık imzaları destekler (aynı zamanda kapanır). Lambda ve anonim delege en azından derleyici arka ucunda (özdeş olmasalar da) algılanan uygulamayı paylaştılar - ve en önemlisi, kapanmaları destekliyorlar. Sadece Lambda'lar (çünkü Daha önce de belirttiğimiz ref değeri promosyon) prosedür ve matematiksel güvenlidir akılda tutmak
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;
};
}
: Ben yaptım sözdizimi göstermek için, arama yapmak için çalışıyordu ne
: Bir solucan konservesi açabilirsin. Bu sözdizimini kullanırken dikkatli düşün.
Sana vardı geçici çözüm ne olduğunu sorabilir miyim geçerli mi bulundu mu? – Beatles1692
Bu yineleyicilerle ilgili, ama bu yazıdaki aynı akıl yürütmenin çoğu (aynı zamanda Eric Lippert — tarafından o zaman dil tasarım ekibindedir) lambdas için geçerlidir: –