これはGoogleでの「C#lambda ref」の上位の結果の1つなので、上記の答えをさらに詳しく説明する必要があると思います。以前の(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;
};
}
ラムダは手続き的および数学的に安全であることを覚えておいてください(前述の参照値の昇格のため)。ワームの缶を開く可能性があります。この構文を使用するときは注意深く検討してください。