เนื่องจากนี่เป็นหนึ่งในผลลัพธ์ยอดนิยมสำหรับ "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;
};
}
เพียงจำไว้ว่า Lambdas นั้นปลอดภัยกว่าในการดำเนินการและทางคณิตศาสตร์ (เนื่องจากการส่งเสริมค่าอ้างอิงที่กล่าวถึงก่อนหน้านี้): คุณอาจเปิดเวิร์มกระป๋องได้ คิดให้รอบคอบเมื่อใช้ไวยากรณ์นี้